你能给我一些关于对象头中究竟存储什么的信息吗?我知道,它可能依赖于 JVM,但至少对于 HotSpot 来说可能是这样?我正在寻找专门针对第一行的确切描述。
我已经阅读了一些我无法用我找到的信息进行肯定验证的信息。也许你有一个 OpenJDK wiki 的链接可以说明一切?
你能给我一些关于对象头中究竟存储什么的信息吗?我知道,它可能依赖于 JVM,但至少对于 HotSpot 来说可能是这样?我正在寻找专门针对第一行的确切描述。
我已经阅读了一些我无法用我找到的信息进行肯定验证的信息。也许你有一个 OpenJDK wiki 的链接可以说明一切?
对于热点:
对象头由一个标记字和一个类指针组成。
标记字具有字长(在4 byte
32 位架构上,8 byte
在 64 位架构上)和
klass 指针在体系结构上具有字长32 bit
。在64 bit
体系结构上,klass 指针要么具有字长,但4 byte
如果堆地址可以在这些4 bytes
.
这种优化称为“compressed oops”,您也可以使用选项控制它UseCompressedOops
。
您还可以找到关于此1的 wiki 条目。
标记词实际上用于许多事情。
Biased Locking
二,HotSpot通过它可以实现高效的加锁。GC to set forward pointers
和期间to store the age of the objects
。对象的身份哈希码可以存储在标记(System.identityHashCode
/Object.hashCode
一)内。markOop.hpp的源代码中有一条注释描述了依赖于架构的布局:
// 32 bits:
// --------
// hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:23 epoch:2 age:4 biased_lock:1 lock:2 (biased object)
// size:32 ------------------------------------------>| (CMS free block)
// PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object)
//
// 64 bits:
// --------
// unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:54 epoch:2 unused:1 age:4 biased_lock:1 lock:2 (biased object)
// PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object)
// size:64 ----------------------------------------------------->| (CMS free block)
//
// unused:25 hash:31 -->| cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && normal object)
// JavaThread*:54 epoch:2 cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && biased object)
// narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object)
// unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)
您还可以在此处找到 oop 头文件。
您可以从HotSpot 源中找到对象布局。
标头由markOop后跟指向instanceKlass的指针(或压缩指针)组成。
The following presentation gives you a general idea of the object contents and the object header: http://www.slideshare.net/cnbailey/memory-efficient-java
The actual header for any object is JVM vendor, version and object type specific.