Java 对象头


Java 对象头

1. Java 对象头的组成

  1. Mark Word
  2. 指向类元信息的指针 Klass Pointer
  3. 数组的长度

对象头信息

1.1 Mark Word

Mark Word 在 32 位 JVM 中的长度是 32 bit,在 64 位 JVM 中长度是 64bit。以 32 位为例:

  • 使用 1 bit 来指示 是否为偏向锁
  • 使用 2 bit 来标志 锁的状态

Mark Word 用来存放对象信息或锁信息。Mark Word 被设计成可以复用的形式,

  • 当对象是无锁态时,Mark Word 记录对象的 hashCode,锁标志位是 01,是否为偏向锁位为 0;
  • 当对象锁为偏向锁时,锁标志位依然是 01,是否为偏向锁位为 1,Mark Word 的前 23 位标志占有偏向锁的线程 id;
  • 当对象锁为轻量级锁时,锁标志位是 00,前 30 位指向栈帧中锁记录的指针
  • 当对象锁位重量级锁时,锁标志位是 10,前 30 位为指向重量级锁的指针

1.2 Klass Pointer

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

References

深入理解Java并发之synchronized实现原理


文章作者: Yu Yang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yu Yang !
 上一篇
Java 线程池 Java 线程池
12. 线程池 Thread Pool12.1 线程池简介线程池 Thread Pool 是一种基于池化思想管理线程的工具,经常出现在多线程服务器中。 如数据库连接池、httpClient连接池。 Java 中的线程池是 ThreadPo
下一篇 
Java 四种引用类型 Java 四种引用类型
四种引用类型1. 强引用强引用就是最普通的引用方式。 GC 时,只要堆中的对象实例存在强引用与之关联,则绝不会被垃圾回收。 Object o = new Object(); 方法中的局部变量的强引用会在方法退出栈帧后自动销毁引用。 对于类的
2020-10-22
  目录