Java对象头包含Mark Word、Klass Pointer和数组长度字段(仅数组对象),其中Mark Word动态复用存储锁状态、哈希码等,Klass Pointer指向类元数据,数组长度字段记录数组大小,整体需内存对齐。

Java对象头主要包含两部分信息:运行时元数据(Mark Word)和类型指针(Klass Pointer),在数组对象中还会额外包含数组长度字段。
Mark Word 是对象头中最关键也最紧凑的部分,大小为 4 字节(32 位 JVM)或 8 字节(64 位 JVM,开启指针压缩时通常仍为 8 字节但部分位被复用)。它不是固定结构,而是根据对象所处的状态动态复用不同含义的位组合。常见状态包括:
System.identityHashCode() 或 Object.hashCode() 时才真正计算并写入(若未被覆盖且未禁用)该指针指向对象所属类的 Class 对象在方法区(元空间)中的地址,JVM 通过它确定对象是哪个类的实例、能调用哪些方法、访问哪些字段等。在开启指针压缩(-XX:+UseCompressedClassPointers,默认开启)的 64 位 JVM 中,该指针被压缩为 4 字节;否则为 8 字节。
非数组对象没有这一部分。数组对象的对象头在 Mark Word 和 Klass Pointer 之后,额外占用 4 字节(32 位)或 8 字节(64 位,压缩下仍为 4 字节)来存储数组长度(array.length),该值在数组创建时确定且不可变。
立即学习“Java免费学习笔记(深入)”;
对象实际占用内存需满足 JVM 的内存对齐要求(通常是 8 字节对齐)。如果对象头 + 实例数据总大小不满足对齐,虚拟机会在末尾自动添加填充字节(padding),这部分不属于对象头,但会影响整体大小。
基本上就这些。对象头虽小,却是 synchronized 锁升级、GC 判断、反射和 Unsafe 操作的基础。理解它的动态结构,比死记某一种“固定布局”更有价值。
以上就是在Java里面对象头包含哪些信息_Java对象头结构与标记字段解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号