Java对象标头中的内容



你能给我一些关于对象头中到底存储了什么的信息吗?我知道,它可能依赖于JVM,但至少对HotSpot来说可能是这样?我正在寻找第一排的确切描述。

我读过一些信息,但我无法与我找到的信息正面核实。也许你有一个指向OpenJDK wiki的链接,它说明了一切?

对于热点:

对象标头由一个标记字和一个klass指针组成

标记字具有字大小(在32位体系结构上为4 byte,在64位体系结构中为8 byte)和

klass指针在CCD_ 3架构上具有字大小。在64 bit体系结构上,klass指针要么具有字大小,但如果堆地址可以在这些4 bytes中编码,则也可以具有4 byte

这种优化被称为"";压缩oops",您也可以使用选项UseCompressedOops来控制它。

你也可以找到关于这个1的wiki条目。

标记词实际上用于许多事情。

  1. 一个是Biased Locking2,HotSpot通过它可以实现高效的锁定
  2. 它也在GC to set forward pointersto 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头文件。

  • 1https://wiki.openjdk.java.net/display/HotSpot/CompressedOops
  • 2https://wiki.openjdk.java.net/display/HotSpot/Synchronization

您可以从HotSpot源中找到对象布局。

标头由markOop和指向instanceKlass的指针(或压缩指针)组成。

下面的演示为您提供了对象内容和对象标头的大致概念:http://www.slideshare.net/cnbailey/memory-efficient-java

任何对象的实际头都是JVM供应商、版本和对象类型特定的。

相关内容

  • 没有找到相关文章

最新更新