0
点赞
收藏
分享

微信扫一扫

java对象创建步骤

  • 图示
  • java对象创建步骤_java虚拟机

  • 虚拟机遇到⼀条new指令时,⾸先检查这个对应的类能否在常量池中定位到⼀个类的符号引⽤
  • 判断这个类是否已被加载、解析和初始化
  • 为这个新⽣对象在Java堆中分配内存空间,其中Java堆分配内存空间的⽅式主要有以下两种

指针碰撞
分配内存空间包括开辟⼀块内存和移动指针两个步骤
⾮原⼦步骤可能出现并发问题,Java虚拟机采⽤CAS配上失败重试的⽅式保证更新操作的原⼦性

空闲列表
分配内存空间包括开辟⼀块内存和修改空闲列表两个步骤
⾮原⼦步骤可能出现并发问题,Java虚拟机采⽤CAS配上失败重试的⽅式保证更新操作的原⼦性

  • 指针碰撞:在堆中有2部分,空闲内存和使用内存
  • java对象创建步骤_JVM_02

  • 将指针往左移动,移动后产生的新内存给对象使用,这就是指针碰撞
  • java对象创建步骤_java虚拟机_03

  • 空闲列表

有1张表,用于存储堆内存的空闲情况
空闲列表维护的是堆内存中不规则不连续的空闲区域
当某块内存被用后,就会从空闲列表中移除

  • 将分配到的内存空间都初始化为零值

例如某个属性为int,则默认值为0
当属性为String时,则默认值为null

  • 设置对象头相关数据

GC分代年龄
对象的哈希码 hashCode
元数据信息

  • 执⾏对象init⽅法,也就是static方法
  • 案例

在1个实体类中,先执行static方法,再执行无参构造方法,最后执行其他方法(例如set方法)



举报

相关推荐

0 条评论