做电子商务系统网站,保险网,网站建设合同 果动.l,外网通过域名访问内网服务器对象内存布局 文章目录 对象内存布局1. 对象的内存布局2. 对象标记(Mark Word)3. 类元信息(类型指针)4. 实例数据和对象填充 1. 对象的内存布局
在Hotspot虚拟机里#xff0c;对象在堆内存中的存储布局可以划分为三个部分#xff1a;对象头(Header)、实例数据(Instance Data…对象内存布局 文章目录 对象内存布局1. 对象的内存布局2. 对象标记(Mark Word)3. 类元信息(类型指针)4. 实例数据和对象填充 1. 对象的内存布局
在Hotspot虚拟机里对象在堆内存中的存储布局可以划分为三个部分对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)保证8个字节的倍数
对象头构成 对象标记(Mark Word) 类元信息又叫类型指针 对象头分为对象标记(markOop)和类元信息(klassOop)类元信息存储的是指向该对象类元数据(klass)的首地址 2. 对象标记(Mark Word)
默认存储对象的HashCode、分代年龄和锁标志位等信息。
这些信息都是与对象自身定义无关的数据所以Markword被设计成一个非固定的数据结构以便在极小的空间内存存储尽量多的数据它会根据对象的状态复用自己的存储空间也就是说在运行期间MakWord里存储的数据会随着锁标志位的变化而变化。
对象标记中保存了以下数据
哈希码GC标记GC次数同步锁标记偏向锁持有者 HotSpot虚拟机对象头Mark Word
存储内容标志位状态对象哈希码、对象分代年龄01未锁定指向锁记录的指针00轻量级锁定指向重量级锁的指针10膨胀重量级锁定空不需要记录信息11GC标记偏向线程ID、偏向时间戳、对象分代年龄01可偏向
在64位系统中Mark Word占8个字节类型指针占8个字节默认会开启压缩指针占4个字节一共是16个字节
一个空Object使用JOL分析的结果
java.lang.Object object internals:
OFF SZ TYPE DESCRIPTION VALUE0 8 (object header: mark) 0x0000000000000001 (non-biasable; age: 0)8 4 (object header: class) 0xf80001e512 4 (object alignment gap)
Instance size: 16 bytes
Space losses: 0 bytes internal 4 bytes external 4 bytes total64位虚拟机中Mark Word的存储结构 3. 类元信息(类型指针)
对象指向它的类元数据的指针虚拟机通过这个指针来确定这个对象是哪个类的实例。即指向class模板的指针
4. 实例数据和对象填充
实例数据存放类的属性(Field)数据信息包括父类的属性信息
对齐填充虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的仅仅是为了字节对齐这部分内存按8字节补充对齐。