java对象头_什么是Java对象标头

本文详细介绍了HotSpot虚拟机中对象头的结构,包括标记词和klass指针,以及它们在不同体系结构下的布局。标记词用于BiasedLocking、GC、对象年龄等,而klass指针则指向对象类型。在64位架构中,通过UseCompressedOops选项可以实现 klass指针的压缩。此外,还讨论了对象身份哈希码的存储以及锁的实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小编典典

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

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

在克拉斯指针对字大小32 bit的架构。在64 bit体系结构上,klass指针要么具有字长,但是4 byte如果可以在这些堆中编码堆地址,也可以具有字长4 bytes。

此优化称为“压缩的oops”,你也可以使用option进行控制UseCompressedOops。

你还可以找到关于此的Wiki条目1。

该标志词实际上是使用了很多东西。

一是Biased Locking 2,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)

2020-03-19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值