在 Java 虚拟机(以最常用的 HotSpot JVM 为例)中,一个 Java 对象在堆内存中的物理布局主要分为三个部分:对象头(Object Header)、实例数据(Instance Data) 和 对齐填充(Alignment Padding)。 下面为您详细拆解这三个部分的内容与作用: --- 一、 对象头(Object Header) 对象头是对象内存布局中最复杂、最核心的部分。它通常包含两类信息(如果是数组,则包含三类): 1. Mark Word(标记字段) 作用:用于存储对象自身的运行时数据。 大小:在 32 位 JVM 中占 4 字节(32 bit),在 64 位 JVM 中占 8 字节(64 bit)。 包含内容: 对象的 HashCode(哈希码)。 GC 分代年龄(默认最大为 15,因为占 4 个 bit)。 锁状态标志(无锁、偏向锁、轻量级锁、重量级锁)。 偏向线程 ID、偏向时间戳等。 动态结构:为了节省空间,Mark Word 被设计成一个非固定的数据结构。它会根据对象当前的锁状态,复用自己的存储空间。例如,当对象处于“无锁”状态时,它存储的是 ...