Java并发那些事儿-对象头

在HotSpot虚拟机中,一个对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。

其中对象头包含两部分信息:

1,一部分用于存储对象自身的运行时数据(Mark Word),如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。

2,一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

3,如果对象是一个java数组,那么在对象头中还有一块用于记录数组长度的数据。

Mark Word被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息。

Mark Word被划分为多个比特位区间,并在不同的对象状态下赋予比特位不同的含义。

Mark Word被划分为多个比特位区间以及不同的含义

对象的状态包含:无锁状态,轻量级锁,重量级锁,GC标记,偏向锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容