Java 对象头
在HotSpot虚拟机实现中,每一个java对象在jvm底层对应一个oop c++对象。
下图为32位的虚拟机,对象的结构。
注意:对象头中的Class对象指针,实际指向一个klass c++对象。该对象表示此Java类的元数据信息。所有java对象,包括java class对象都对应一个oop c++对象。
java对象--------class对象实际通过下述关系维护:
java对象(klass指针)-------->klass对象(内部的oop指针)---->class对象。
此外数组对象的对象头还会额外有一个字段表示数组长度。
对象头信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率,Mark Word被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息,它会根据对象的状态复用自己的存储空间。
下图描述了在32位虚拟机上,在对象不同状态时 mark word各个比特位区间的含义。