我正在研究java对象头的组成。
发现了一些文档和一些有趣的问题。
64位vm下,默认对象头如下(因为UseCompressedOops
默认是开启的)
|------------------------------------------------- -------------------------------------------------- -----------|--------------------| | 对象头(96 位)| 状态 | |------------------------------------------------- -------------------------------|------------------- -----------|--------------------| | 标记字(64 位) | 类字(32 位) | | |------------------------------------------------- -------------------------------|------------------- -----------|--------------------| | 未使用:25 | identity_hashcode:31 | cms_free:1 | 年龄:4 | 偏向锁:1 | 锁:2 | OOP 到元数据对象 | 正常 | |------------------------------------------------- -------------------------------|------------------- -----------|--------------------| | 线程:54 | 时代:2 | cms_free:1 | 年龄:4 | 偏向锁:1 | 锁:2 | OOP 到元数据对象 | 有偏见 | |------------------------------------------------- -------------------------------|------------------- -----------|--------------------| | ptr_to_lock_record | 锁:2 | OOP 到元数据对象 | 轻量级锁定 | |------------------------------------------------- …