GC根对象类型

本技术文档旨在介绍 GC 根对象的概念及其类型。垃圾回收器通过扫描不同区域的根对象来识别存活对象,并进行内存管理。文档详细列举了多个 GC 根对象类型及其描述,帮助开发者快速理解 Java 内存管理中的重要概念。

GC根对象的概念

垃圾回收器从这些区域开始扫描存活对象。比如下图中,垃圾回收器从线程栈这片区域出发,扫描到对象AB,然后以这两个对象为起点,扫描其他对象。

image.png

不同的区域存放了不同的GC根对象,在分析过程中可能遇到的所有区域如下:

image

GC根对象类型

对象类型

描述

Unknown

未知类型。

System Class

这是一个java.lang.Class对象。

Jni Local

这是一个 JNI 局部引用。

Jni Global

这是一个 JNI 全局引用。

Thread Block

这个对象被当前活跃的对象块引用。

Busy Monitor

这是一个调用了wait或者notify的对象,或者它作为同步对象被用于synchronized块。

Java Local

这是一个 Java 局部变量,只存在于当前栈帧中。

Native Stack

这是 native 方法的入参。

Thread

这是一个java.lang.Thread对象。

Finalizable

这是一个等待执行finalize方法的对象。

Unfinalized

这个对象虽然有finalize方法,但该finalize从未被调用过,也没有在finalize队列中等待被调用。

Unreachable

这是一个垃圾对象,即垃圾回收器无法触及到的对象,在下一次 GC 中将会被回收。

Stackframe

包含局部变量的 Java 栈帧。

Nmethod

这是一个 JIT 编译的方法。