展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

java对象创建步骤

  • 图示

  • 虚拟机遇到⼀条new指令时,⾸先检查这个对应的类能否在常量池中定位到⼀个类的符号引⽤

  • 判断这个类是否已被加载、解析和初始化

  • 为这个新⽣对象在Java堆中分配内存空间,其中Java堆分配内存空间的⽅式主要有以下两种

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

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

  • 将指针往左移动,移动后产生的新内存给对象使用,这就是指针碰撞

  • 空闲列表

有1张表,用于存储堆内存的空闲情况
空闲列表维护的是堆内存中不规则不连续的空闲区域
当某块内存被用后,就会从空闲列表中移除
  • 将分配到的内存空间都初始化为零值
例如某个属性为int,则默认值为0
当属性为String时,则默认值为null
  • 设置对象头相关数据
GC分代年龄
对象的哈希码 hashCode
元数据信息
  • 执⾏对象init⽅法,也就是static方法

  • 案例

在1个实体类中,先执行static方法,再执行无参构造方法,最后执行其他方法(例如set方法)
posted @ 2022-09-15 10:09  DogLeftover  阅读(37)  评论(0编辑  收藏  举报