您的位置 首页 java

华为技术大佬带你从JVM源码看透对象头

JVM是由一个对应角色的oop对象来描述Java对象:

  • instanceOopDesc
  • 描述普通实例对象
  • arrayOopDesc 描述数组对象

这些类型的oop对象均是继承自oopDesc:

oopDesc主要包含

_mark

一个markOop实例,它描述了一个对象的头信息,用于存储对象的运行时记录信息,如hashCode、GC分代年龄、是否偏向锁、锁状态标志(默认无锁)、线程持有的锁、偏向线程ID、偏向时间戳等。

运行期间,Mark Word里存储的数据会随着是否偏向锁、锁标志位的变化而变化,如下图五种状态中其中一种,即同一时刻MarkWord只能表示其中一种锁状态:

锁标志位状态只有如下四种:

无锁和偏向锁的锁标志位都是01,那Mark Word如何区分呢?如下图,Mark Word的五种状态都有共同的信息字段:

  • 是否偏向锁(biased_lock)
  • 锁标志位(lock)

所以,锁标志位和是否偏向锁两个信息字段组合就能表示五种Mark Word状态。

_metadata

  • 一个普通_klass
  • 一个压缩后的_compressed_klass

文章来源:智云一二三科技

文章标题:华为技术大佬带你从JVM源码看透对象头

文章地址:https://www.zhihuclub.com/177206.shtml

关于作者: 智云科技

热门文章

网站地图