Java虚拟机-02 对象创建与布局

对象创建

1、内存分配

分配方式

  • 指针碰撞 - 适用于内存分布整齐,带有压缩功能的垃圾收集器
  • 空闲列表 - 适用于类似CMS垃圾收集器

2、抢占内存空间

抢占方式

  • CAS
  • 预先分配 thread local allpcation buffer 可通过-XX:+/-UserTLAB配置

3、内存空间初始化为零值

4、初始化对象头

5、执行<init>方法/<init>

对象布局

对象头

对象头分为以下两个部分:

  1. 运行数据:哈希码、GC分代年龄、锁标志等
  2. 类型指针:指向元数据 - 确定对象属于哪个类

对象访问定位

依赖具体jvm的实现,有以下两种

  1. 句柄 - 引用稳定
  2. 直接指针 - 主流 更快


分享到:


相關文章: