谈谈Java中类的实例化过程

Java面试 潘老师 8个月前 (09-05) 166 ℃ (0) 扫码查看

Java面试题:谈谈Java中类的实例化过程

得分点:

类加载、分配内存、初始化零值、状态设置、构造函数

标准回答:

JVM 中,对象的创建遵循如下过程:

  1. 类加载: 当 JVM 遇到一条字节码 new 指令时,首先检查该指令的参数是否能在常量池中找到一个类的符号引用,并验证该类是否已被加载、解析和初始化。如果尚未加载,则必须先执行相应的类加载过程。
  2. 分配内存: 在类加载检查通过后,虚拟机为新对象分配内存。对象所需内存的大小在类加载完成后便可确定,分配内存的任务等同于从 Java 堆中划分出一块确定大小的内存块。
  3. 初始化零值: 分配内存完成后,虚拟机必须将分配到的内存空间初始化为零值。如果使用了 TLAB(线程本地分配缓冲区),这一步骤可以提前至 TLAB 分配时一并进行。这确保了对象的实例字段在 Java 代码中可以不赋初值直接使用,使得程序可以访问到这些字段的数据类型所对应的零值。
  4. 状态设置: 接下来,虚拟机对对象进行必要的设置,包括确定对象属于哪个类、如何找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。这些信息存放在对象的对象头中,根据虚拟机当前运行状态的不同,如是否启用偏向锁等,对象头的设置方式也会不同。
  5. 构造函数: 虽然从虚拟机的视角看,一个新的对象已经产生,但从 Java 程序的视角看来,对象的创建才刚刚开始。构造函数,即 Class 文件中的 <init>() 方法还未执行,所有字段都保持默认的零值,对象需要的其他资源和状态信息也未按预期构造。通常情况下,new 指令后会立即执行 <init>() 方法,按程序员的意愿初始化对象,这样才算完全构造出一个可用的对象。

这个过程展示了在 JVM 中创建对象的详细步骤,同时强调了构造函数在对象初始化中的重要性。这一流程保证了对象的正确创建和初始化。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/javainterview/8722.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】