MST

星途 面试题库

面试题:Java内存模型中的对象头包含哪些信息及其作用

在Java内存管理中,对象头对于对象的管理和操作至关重要。请说明Java对象头具体包含哪些信息,这些信息在垃圾回收、对象锁机制等方面分别起到什么作用。
45.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Java对象头包含的信息

  1. Mark Word
    • 存储对象的运行时元数据,如哈希码(HashCode)、对象分代年龄、锁状态标志、偏向锁的线程ID等。其长度在32位和64位虚拟机中分别为32bit和64bit。
  2. Klass Pointer
    • 指向对象的类元数据的指针,通过它可以找到对象所属的类。在64位虚拟机中,默认开启指针压缩,该指针长度为4字节;若未开启指针压缩,长度为8字节。在32位虚拟机中,长度为4字节。在数组对象中,对象头还会额外包含数组长度。

在垃圾回收方面的作用

  1. Mark Word中的分代年龄:垃圾回收器依据对象的分代年龄来决定是否回收对象。对象每经历一次Minor GC且未被回收,其分代年龄就会增加。当分代年龄达到一定阈值(通常是15),对象会晋升到老年代,避免在年轻代频繁回收中反复复制。
  2. 对象是否可达标记:垃圾回收算法(如可达性分析算法)在标记阶段,会借助对象头的某些标志来标记对象是否可达。不可达对象可能会被回收。

在对象锁机制方面的作用

  1. 偏向锁:Mark Word中记录偏向锁的线程ID。当一个线程访问加锁对象时,若对象处于偏向锁状态且偏向的线程为当前线程,那么该线程无需再次获取锁,直接进入同步块,提高了执行效率。
  2. 轻量级锁:在轻量级锁状态下,Mark Word记录指向栈中锁记录的指针。线程尝试获取轻量级锁时,会在自己的栈帧中创建锁记录,并将对象头的Mark Word复制到锁记录中,然后尝试用CAS操作将对象头的Mark Word替换为指向锁记录的指针。若成功,则获取到轻量级锁。
  3. 重量级锁:当轻量级锁竞争激烈升级为重量级锁时,Mark Word会存储指向重量级锁(monitor)的指针。此时,其他线程获取锁时会被阻塞,进入monitor的等待队列。