深入理解Java虚拟机之对象实例化篇

对象实例化

​ Java是面向对象的静态强类型语言,我们一般先声明并创建对象,根据某个类声明一个引用变量指向被创建的对象,并使用此引用变量操作该对象,如Object obj = new Object(),obj 即引用变量,也叫实例成员变量。下面通过简单地从执行步骤的角度来分析:

  • 确定类元信息是否存在。当JVM接受到new指令时,首先在metaspace内检查需要创建的类元信息是否存在。若不存在,那么在双亲委派模式下,使用当前类加载器ClassLoader + 包名 + 类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常;如果找到,则进行类加载,并生成对应的Class类对象。
  • 分配对象内存。首先计算对象所占用空间的大小,如果实例成员变量是引用变量,仅分配引用变量即可,即4个字节大小,接着在堆中划分一块内存给新对象。在分配内存空间时,需进行同步操作,比如采用CAS(Compare And Swap)失败重试区域加锁等方式保证分配操作的原子性
  • 设定默认值。成员变量值都需要设定为默认值,即各种不同形式的零值
  • 设置对象头。设置新对象的哈希码GC信息锁信息对象所属的类元信息等。具体的设置方式取决于JVM实现
  • 执行init方法。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值