【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字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐