厦门php网站建设,万江建设网站,wordpress 登入 跳,wordpress 点击弹出层JAVA基础知识
说一下对象创建的过程#xff1f; 类加载检查#xff1a;当Java虚拟机#xff08;JVM#xff09;遇到一个类的new指令时#xff0c;它首先检查这个类是否已经被加载、链接和初始化。如果没有#xff0c;JVM会通过类加载器#xff08;ClassLoader#xff…JAVA基础知识
说一下对象创建的过程 类加载检查当Java虚拟机JVM遇到一个类的new指令时它首先检查这个类是否已经被加载、链接和初始化。如果没有JVM会通过类加载器ClassLoader加载这个类。分配内存JVM为新对象分配内存。这个内存分配是在堆Heap上进行的堆是JVM用来存储对象实例的地方。分配内存的大小在类加载时就已经确定因为类的结构包括字段和方法已经确定。零值初始化在内存分配之后JVM会将分配的内存空间初始化为零值。对于对象引用零值是null对于整数类型零值是0对于浮点类型零值是0.0对于布尔类型零值是false对于字符类型零值是\u0000即Unicode字符’\u0000’。设置对象头JVM会设置对象头Object Header它包含了对象的运行时数据如哈希码、GC分代年龄等信息。调用构造方法在内存分配和初始化之后JVM调用对象的构造方法Constructor。构造方法是一个特殊的方法用于初始化新创建的对象。构造方法的名称必须与类名相同并且没有返回类型。对象创建完成一旦构造方法执行完成对象就被认为是创建完成的。此时对象可以被使用它的字段已经被构造方法赋予了初始值。垃圾回收当对象不再被引用时它可能会成为垃圾回收Garbage Collection, GC的目标。GC是JVM用来回收不再使用的对象所占用的内存的机制。 ThreadLocal是什么实现原理是什么 ThreadLocal 是线程独有而不是进程独有。 在Java中ThreadLocal 为每个线程提供了一个独立的变量副本这意味着每个线程访问自己的 ThreadLocal 变量时都是访问自己的副本不会与其他线程共享。这是通过在每个线程的 Thread 对象中维护一个 ThreadLocal.ThreadLocalMap 实现的这个映射表将 ThreadLocal 对象作为键将线程的局部变量值作为值。 线程隔离每个线程通过自己的 ThreadLocalMap 存储数据因此每个线程都有自己独立的副本实现了线程隔离。 内存分配ThreadLocal 的内存分配是在线程的栈上进行的每个线程都有自己的栈因此 ThreadLocal 变量的存储也是线程独有的。 ThreadLocal 通常用于以下场景 数据库连接和会话管理每个线程可以拥有自己的数据库连接这样可以避免多线程操作时的数据库连接冲突。 事务处理在处理事务时每个线程可以有自己的事务对象互不干扰。 用户会话信息在 Web 应用中每个线程可以存储和管理自己的用户会话信息。 线程请求日志收集