【jvm】java对象头

目录

          • [1. 构成部分](#1. 构成部分)
            • [1.1 Mark Word(标记字)](#1.1 Mark Word(标记字))
            • [1.2 类元数据指针(Class Metadata Pointer)](#1.2 类元数据指针(Class Metadata Pointer))
            • [1.3 数组长度(如果对象是数组)](#1.3 数组长度(如果对象是数组))
          • [2. 大小](#2. 大小)
1. 构成部分
1.1 Mark Word(标记字)
  • 1.哈希码(Hash Code):用于支持快速查找,例如在HashMap等集合类中。
  • 2.GC分代年龄(GC Age):用于记录对象在垃圾回收中的存活时间,帮助JVM决定何时进行晋升(例如从年轻代晋升到老年代)。
  • 3.锁状态标志:用于支持多线程同步,例如轻量级锁、重量级锁、偏向锁等。
  • 4.偏向线程ID:当对象被某个线程持有偏向锁时,存储该线程的ID。
  • 5.类元数据指针:指向对象所属类的元数据信息(在Java 8及以后,元数据的存储由方法区中的类型信息指针指向)。
1.2 类元数据指针(Class Metadata Pointer)
  • 1.在Java 8之前,这个指针指向方法区中的类型信息(也称为方法表)。
  • 2.在Java 8及以后,由于元空间的引入,这个指针指向的是元空间中的类型信息。它包含了类的元数据,如类的方法、字段、父类、接口等。
1.3 数组长度(如果对象是数组)
  • 1.如果对象是一个数组,对象头中还会包含一个额外的字段来存储数组的长度。
2. 大小
  • 1.对象头的大小并不是固定的,它依赖于JVM的实现和具体的平台(如32位或64位系统)。
  • 2.在64位JVM中,对象头通常是12字节或16字节(依赖于JVM的具体实现):
    a.普通对象(非数组):在64位JVM中,对象头通常是12字节(Mark Word占8字节,类元数据指针占4字节)。
    b.数组对象:在64位JVM中,对象头通常是16字节(Mark Word占8字节,类元数据指针占4字节,数组长度占4字节)。
相关推荐
黄昏恋慕黎明2 小时前
JVM虚拟机(面试重)
jvm·面试·职场和发展
救救孩子把3 小时前
从 JDK 8 到 JDK 23:HotSpot 垃圾回收器全景演进与深度剖析
java·开发语言·jvm·jdk
光军oi4 小时前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm
Moniane5 小时前
C++深度解析:从核心特性到现代编程实践
java·开发语言·jvm
我星期八休息7 小时前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
野生技术架构师7 小时前
JAVA 架构师面试题含答案:JVM+spring+ 分布式 + 并发编程
java·jvm·spring
沐浴露z8 小时前
【JVM】详解 垃圾回收
java·jvm·算法
沐浴露z10 小时前
【JVM】详解 对象的创建
java·jvm
Knight_AL10 小时前
如何解决 Jacob 与 Tomcat 类加载问题:深入分析 Tomcat 类加载机制与 JVM 双亲委派机制
java·jvm·tomcat
无毁的湖光-Al10 小时前
日常问题排查-Younggc突然变长
jvm·gc