GC Roots 根节点

Java 中,垃圾收集器根 GC Roots 是特殊的对象。了解它有助于理解垃圾收集器的工作原理。

GC Roots

GC Roots 是Java垃圾收集上下文中使用的术语。它们是垃圾收集器的特殊对象。顾名思义,GC 根是垃圾收集器进程的起点。通常,从 GC 根直接或间接引用的所有对象都不会被垃圾回收。

GC Roots的类型

GC Roots 的主要类型:

  • Class:由系统类加载器加载的类;还包含对静态变量的引用
  • Stack Local:存储在本地堆栈上的方法的局部变量和参数
  • Java Threads:所有活动 Java 线程
  • JNI References:为 JNI 调用创建的本机代码 Java 对象;包含局部变量、JNI 方法的参数和全局 JNI 引用

GC Roots 必要性

应用程序主动使用的所有对象都是 GC 的活动对象。垃圾收集器不会删除活动对象。GC Roots 是一种特殊类型的活动对象。

HotSpot JVM 中的所有 GC 实现都是跟踪收集器。GC 通过遍历对象树来识别所有活动对象。访问并标记为活动的对象不会被垃圾收集。为了能够遍历树形,起点是必要的,GC Roots 便是收集器的起点。

GC 从根开始遍历树,并将树中所有访问过的对象标记为活动的。该过程根据应用程序中定义的每个 GC Roots 开始执行。它处理从所有 GC 根开始的所有树。然后将所有访问过的对象标记为活动的,所有未访问过的对象都被垃圾回收。我们将这称之为可达性分析算法。

标签: