Java对象头

对象是什么
JAVA是一个面向对象的语言,在Java中可以使用new关键字来产生一个对象,但这个对象到底是什么,应该具有哪些属性?
首先跟我们自己先想下,Java对象已经有以下几个属性:

  1. 属于哪个类
  2. 有哪些字段和类型
  3. 对象的值 ….
在HotSpot虚拟机中,真实的Java对象是分成三个部分:
  1. 对象头
  2. 对象的值
  3. 对象的填充字节 (在JVM中,要求对象占用内存的大小应该是8bit的倍数,这个信息是用来补齐8bit的,无其他作用)
对象头
【Java对象头】对象头是Java中对象都具有的属性,是jvm在编译和运行阶段读取的信息 。对象头包含三个部分:
  1. mark word
  2. 指针向类的指针
  3. 数组的长度(只有数组的对象用到)
这3个中最复杂的是MarkWord,MarkWord用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等 。在32bit的环境中,Java头存储的信息如下
Java对象头

文章插图
 
对象头的应用


    推荐阅读