JAVA相关知识

ops/2024/9/23 6:22:01/

JAVA基础知识

说一下对象创建的过程?

  1. 类加载检查:当Java虚拟机(JVM)遇到一个类的new指令时,它首先检查这个类是否已经被加载、链接和初始化。如果没有,JVM会通过类加载器(ClassLoader)加载这个类。
  2. 分配内存:JVM为新对象分配内存。这个内存分配是在堆(Heap)上进行的,堆是JVM用来存储对象实例的地方。分配内存的大小在类加载时就已经确定,因为类的结构(包括字段和方法)已经确定。
  3. 零值初始化:在内存分配之后,JVM会将分配的内存空间初始化为零值。对于对象引用,零值是null;对于整数类型,零值是0;对于浮点类型,零值是0.0;对于布尔类型,零值是false;对于字符类型,零值是\u0000(即Unicode字符’\u0000’)。
  4. 设置对象头:JVM会设置对象头(Object Header),它包含了对象的运行时数据,如哈希码、GC分代年龄等信息。
  5. 调用构造方法:在内存分配和初始化之后,JVM调用对象的构造方法(Constructor)。构造方法是一个特殊的方法,用于初始化新创建的对象。构造方法的名称必须与类名相同,并且没有返回类型。
  6. 对象创建完成:一旦构造方法执行完成,对象就被认为是创建完成的。此时,对象可以被使用,它的字段已经被构造方法赋予了初始值。
  7. 垃圾回收:当对象不再被引用时,它可能会成为垃圾回收(Garbage Collection, GC)的目标。GC是JVM用来回收不再使用的对象所占用的内存的机制。

ThreadLocal是什么?实现原理是什么?

ThreadLocal 是线程独有,而不是进程独有。
在Java中,ThreadLocal 为每个线程提供了一个独立的变量副本,这意味着每个线程访问自己的 ThreadLocal 变量时,都是访问自己的副本,不会与其他线程共享。这是通过在每个线程的 Thread 对象中维护一个 ThreadLocal.ThreadLocalMap 实现的,这个映射表将 ThreadLocal 对象作为键,将线程的局部变量值作为值。
线程隔离:每个线程通过自己的 ThreadLocalMap 存储数据,因此每个线程都有自己独立的副本,实现了线程隔离。
内存分配:ThreadLocal 的内存分配是在线程的栈上进行的,每个线程都有自己的栈,因此 ThreadLocal 变量的存储也是线程独有的。

ThreadLocal 通常用于以下场景:
数据库连接和会话管理:每个线程可以拥有自己的数据库连接,这样可以避免多线程操作时的数据库连接冲突。
事务处理:在处理事务时,每个线程可以有自己的事务对象,互不干扰。
用户会话信息:在 Web 应用中,每个线程可以存储和管理自己的用户会话信息。
线程请求日志收集


http://www.ppmy.cn/ops/110682.html

相关文章

计算机网络八股总结

这里写目录标题 网络模型划分(五层和七层)及每一层的功能五层网络模型七层网络模型(OSI模型) 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址,子…

1T机械硬盘需要分区吗?你必须知道的分区知识

随着科技的不断发展,计算机存储设备的容量日益增大,1T(1TB,即1024GB)机械硬盘已成为许多电脑用户的标配。然而,在这样一个大容量硬盘面前,很多用户都会面临一个问题:是否需要对这块硬盘进行分区&#xff1f…

ctfshow-PHP反序列化

web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com //mytime 2023-12-4 0:22 */ error_reporting(0)…

Python 常用模块(二):json模块

目录 1. json 模块介绍1.1 json 模块快用导航1.2 什么是JSON1.2.1 JSON的特点1.2.2 JSON的基本语法1.2.3 JSON数据类型1.2.4 JSON示例1.2.5 JSON使用场景1.2.6 JSON的优缺点1.2.7 JSON和XML的比较 1.3 json 模块 2. dump() 方法 --- 转换为 JSON 格式写入文件2.1 语法参考2.2 实…

DNS查询报文分析

目录 1. 用 tcpdump工具监听抓包 2. 用 host 工具获取域名对应的IP地址 3. 分析DNS以太网查询数据帧 3.1 linux下查询DNS服务器IP地址 3.2 DNS以太网查询数据帧 (1)数据链路层 (2)网络层 (3)传输层 (4)应用层 DNS (Domain Name System),域名系统是互…

软件测试 - 性能测试 (实战 - 基于场景的性能测试-博客系统)(⼯具 - JMeter )

一、 JMeter介绍 1.1 安装JMeter 下载tar包&#xff0c;解压即可。 这里使用的是5.5版本的 解压后&#xff0c;在bin目录下找到 jmeter.bat 双击 正常双击之后&#xff0c;会出来一个终端 如果报错&#xff0c;在bin目录下&#xff0c;打开jmeter.properties文件&#xff0c;…

Rust 循环引用与内存泄漏指南:如何避免‘死亡拥抱

1. 概述Rust的内存管理与循环引用问题 Rust 内存管理的独特性&#xff1a;首先详细描述Rust的所有权和借用检查系统&#xff0c;特别是这些机制如何确保绝大多数情况下的内存安全性&#xff0c;并避免常见的悬空指针&#xff08;Dangling Pointer&#xff09;和二次释放&#…

PP_HTONL(x)

#define PP_HTONL(x) ((((x) & (u32_t)0x000000ffUL) << 24) | \(((x) & (u32_t)0x0000ff00UL) << 8) | \(((x) & (u32_t)0x00ff0000UL) >> 8) | \(((x) & (u32_t)0xff000000UL) >> 24)) 这个宏 PP_HTONL(x) 用于将一个 32 位无符号…