【1】对象头中的Mark Word(标记字)主要用来表示对象的线程锁状态,另外还可以用来配合GC、存放该对象的hashCode

【2】Klass Word是一个指向方法区中 Class信息的指针,意味着该对象可随时知道自己是哪个 Class的实例;

【3】数组长度也是占用64位(8字节)的空间,这是可选的,只有当本对象是一个数组对象时才会有这个部分;

【4】对象体是用于保存对象属性的主体部分,占用内存空间取决于对象的属性数量和类型;

【5】对齐字是为了减少堆内存的碎片空间(不一定准确)。

GC的age为什么只有15💡

垃圾回收,为什么age只能15?因为存储的bit只有4为,即2^4.0-15

堆内存存储

对象是放在堆内存中的,对象大致可以分为三个部分,分别是对象头,实例变量和填充字节

  • 对象头,主要包括两部分1. Mark Word (标记字段),2.Klass Pointer(类型指针)。Klass Point 是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例(即指向方法区类的模版信息)。Mark Word用于存储对象自身的运行时数据
  • 数组长度也是占用64位(8字节)的空间,这是可选的,只有当本对象是一个数组对象时才会有这个部分;
  • 实例变量,存放类的属性数据信息,包括父类的属性信息,这部分内存按4字节对齐
  • 填充数据,由于虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐