java中对象头的用法

美女程序员鼓励师

我们在进行锁的使用时,会把它放在对象头上。有些人不理解对象头的意思,其实我们可以把它看成是处理锁的一个工具,主要是负责对锁的功能进行使用。在使用synchronized锁的时候会有所涉及,所以接下来我们就对象头的概念、包含内容,以及对象头使用的实例为大家进行讲解。

1.对象头概念

Hotspot虚拟机的对象头主要包括两部分数据:Mark Word(标记字段)、Klass Pointer(类型指针)。其中Klass Point是是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例,Mark Word用于存储对象自身的运行时数据,它是实现轻量级锁和偏向锁的关键,

2.对象头包含内容

主要包含了对象的基本信息,比如:

  • 布局

  • GC状态

  • 类型

  • 同步状态

  • (identity) hash code

  • 数组长度 (前提你得是数组)

3.对象头实例

class oopDesc {

  friend class VMStructs;

 private:

  volatile markOop  _mark;

  union _metadata {

    wideKlassOop    _klass;

    narrowOop       _compressed_klass;

  } _metadata;

}

上面代码中的_mark和_metadata其实就是对象头的定义。关于_metadata之前就介绍过,这里不再赘述。由于这个专题主要想介绍和JAVA并发相关的知识,所以本文展开介绍一下_mark,即mark word。

以上就是java中对象头的用法,掌握了对象头的基础用法后,才能对synchronized锁的处理有更好的运用。运行完实例后,相信大家对对象头的用法有了初步的认识。

以上是 java中对象头的用法 的全部内容, 来源链接: utcz.com/z/542476.html

回到顶部