我们在进行锁的使用时,会把它放在对象头上。有些人不理解对象头的意思,其实我们可以把它看成是处理锁的一个工具,主要是负责对锁的功能进行使用。在使用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锁的处理有更好的运用。运行完实例后,相信大家对对象头的用法有了初步的认识。