在 Java 虚拟机(以最常用的 HotSpot JVM 为例)中,对象在内存中的布局分为三个部分:对象头(Object Header)、实例数据(Instance Data) 和 对齐填充(Padding)。 你所问的对象头(Object Header),主要包含以下两到三个部分的信息: 1. Mark Word(标记字段) 这是对象头中最复杂、包含信息最多的一部分。它主要用来存储对象自身的运行时数据。 为了在极小的空间内存下存储尽量多的信息,Mark Word 被设计成一个非固定的动态数据结构,它会根据对象当前的状态复用自己的存储空间。 在 64位 JVM 中,Mark Word 占 8 个字节(64 bit)。根据对象锁状态的不同,它包含的具体信息会发生动态变化,主要有以下五种状态: 无锁状态(Normal / Unlocked): 对象的 HashCode(注意:这里存的是未重写的原始 IdentityHashCode,一旦调用过系统的 方法计算后就会存在这里)。 分代年龄(GC Age):占 4 bit,因此 Java 对象默认晋升老年代的年龄最大是 15($2^4 -...