对象创建
1、内存分配
分配方式
- 指针碰撞 - 适用于内存分布整齐,带有压缩功能的垃圾收集器
- 空闲列表 - 适用于类似CMS垃圾收集器
2、抢占内存空间
抢占方式
- CAS
- 预先分配 thread local allpcation buffer 可通过-XX:+/-UserTLAB配置
3、内存空间初始化为零值
4、初始化对象头
5、执行<init>方法/<init>
对象布局
对象头
对象头分为以下两个部分:
- 运行数据:哈希码、GC分代年龄、锁标志等
- 类型指针:指向元数据 - 确定对象属于哪个类
对象访问定位
依赖具体jvm的实现,有以下两种
- 句柄 - 引用稳定
- 直接指针 - 主流 更快
閱讀更多 IT學習分享 的文章