java对象头具体都包含哪些内容?
1 个回答
提升自己比迎合别人要有用的多。萧晨### Java 对象头的具体内容及其作用 在 HotSpot 虚拟机中,Java 对象头的内容分为三部分:Mark Word、类型指针和数组长度(仅适用于数组对象)。以下是每个部分的详细内容及其作用:  1. **Mark Word** - **作用**:存储对象在运行时所需的各种数据,这些数据会随着对象状态的变化而变化。 - **内容**: - **对象的 hashcode**:用于快速比较对象和散列集合中的对象。 - **GC 分代年龄**:用于垃圾回收时标识对象在堆中的年龄。 - **锁状态标志位**:标识对象当前的锁状态(无锁、偏向锁、轻量级锁或重量级锁)。 - **轻量级锁指针**:指向用于轻量级锁的锁记录(Lock Record)。 - **重量级锁指针**:指向重量级锁的监视器(Monitor)。 - **GC 标记**:在垃圾回收期间用于标识对象的标记。 - **偏向锁线程 ID**:如果对象处于偏向锁状态,记录偏向锁持有线程的 ID。 - **偏向锁时间戳**:记录偏向锁的时间戳,用于偏向锁的撤销。 2. **类型指针** - **作用**:指向对象所属类的元数据。 - **内容**: - **指针**:指向对象所属类的 Klass 对象,通过这个指针可以确定对象是哪个类的实例。 3. **数组长度(仅适用于数组对象)** - **作用**:存储数组的长度信息。 - **内容**: - **长度值**:记录数组的长度,用于在访问数组时进行边界检查。 ### 实例数据和对齐填充 4. **实例数据** - **作用**:存储对象的实际数据,即对象的字段值。 - **内容**: - 对象实例的所有字段,包括从父类继承下来的字段。 5. **对齐填充** - **作用**:确保对象的大小是 8 字节的整数倍,以满足 JVM 对象内存对齐的要求。 - **内容**: - 根据需要添加的填充字节。编辑于 2024-07-23 10:38 •IP属地 北京举报评论收藏
公众号进入网站体验更佳

