MST

星途 面试题库

面试题:Java中对象头在内存布局里的作用及组成

请阐述Java对象头在对象内存布局中的作用,并且详细说明其主要包含哪些部分,每个部分都存储了什么信息。
17.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Java对象头在对象内存布局中的作用

Java对象头是Java对象在内存布局中的重要组成部分,它用于存储对象的元数据信息。这些元数据对于Java虚拟机(JVM)管理对象、实现垃圾回收、支持并发控制等机制起着关键作用。例如,对象头中的信息可帮助JVM判断对象是否已被垃圾回收标记,以及在多线程环境下实现对象的同步访问。

Java对象头主要包含的部分及存储信息

  1. Mark Word(标记字段)
    • 存储信息
      • 对象的哈希码(HashCode):在对象调用hashCode()方法时会生成并存储在这里,用于在哈希表等数据结构中快速定位对象。
      • 对象分代年龄:在垃圾回收过程中,记录对象经历垃圾回收的次数,以决定对象是否晋升到老年代。
      • 锁状态标志:标识对象的锁状态,如无锁、偏向锁、轻量级锁、重量级锁等不同状态,用于多线程环境下的同步控制。例如,偏向锁模式下,该字段记录持有偏向锁的线程ID。
  2. Klass Pointer(类型指针)
    • 存储信息:指向对象的类元数据的指针,JVM通过这个指针来确定对象所属的类,进而获取类的元数据信息,如类的方法、字段等。通过该指针,JVM能够在运行时动态地根据对象的类信息进行方法调用、字段访问等操作。在64位虚拟机中,开启指针压缩时,该指针为4字节,未开启指针压缩时为8字节。
  3. 数组长度(仅数组对象有)
    • 存储信息:对于数组对象,对象头中还包含数组的长度信息。这使得JVM能够直接获取数组的长度,方便在访问数组元素时进行边界检查等操作。例如,在执行array[i]操作时,JVM可根据此长度信息判断i是否越界。