本技术文档旨在介绍 GC 根对象的概念及其类型。垃圾回收器通过扫描不同区域的根对象来识别存活对象,并进行内存管理。文档详细列举了多个 GC 根对象类型及其描述,帮助开发者快速理解 Java 内存管理中的重要概念。
GC根对象的概念
垃圾回收器从这些区域开始扫描存活对象。比如下图中,垃圾回收器从线程栈这片区域出发,扫描到对象A和B,然后以这两个对象为起点,扫描其他对象。

不同的区域存放了不同的GC根对象,在分析过程中可能遇到的所有区域如下:
JNI Global(JNI 全局引用)、System Class(系统类)、Thread(线程栈)、Busy Monitor(活动监视器)等。在堆转储的 GC 根对象列表中,每个区域可查看对象数量、对象大小及关联大小。
GC根对象类型
|
对象类型 |
描述 |
|
Unknown |
未知类型。 |
|
System Class |
这是一个 |
|
Jni Local |
这是一个 JNI 局部引用。 |
|
Jni Global |
这是一个 JNI 全局引用。 |
|
Thread Block |
这个对象被当前活跃的对象块引用。 |
|
Busy Monitor |
这是一个调用了 |
|
Java Local |
这是一个 Java 局部变量,只存在于当前栈帧中。 |
|
Native Stack |
这是 native 方法的入参。 |
|
Thread |
这是一个 |
|
Finalizable |
这是一个等待执行 |
|
Unfinalized |
这个对象虽然有 |
|
Unreachable |
这是一个垃圾对象,即垃圾回收器无法触及到的对象,在下一次 GC 中将会被回收。 |
|
Stackframe |
包含局部变量的 Java 栈帧。 |
|
Nmethod |
这是一个 JIT 编译的方法。 |