Oracle HotSpot JVM中GC Roots的类型有哪些?官方资料缺失求解
Oracle HotSpot JVM 中的 GC Roots 类型
Oracle HotSpot JVM 的官方文档并未明确枚举 GC Roots 的所有类型,但基于 HotSpot 的实现机制和行业普遍共识,GC Roots 主要包含以下类别:
核心类型
- Class:由启动类加载器(Bootstrap Class Loader)加载的类,这类类本身不会被垃圾回收,其持有的静态变量引用也属于 GC Roots 范畴。
- Stack Local:当前活跃线程栈中的方法局部变量与参数,也就是正在执行的方法里直接持有的对象引用。
- Active Java Threads:所有处于活跃状态的 Java 线程对象,以及这些线程栈中可访问的所有对象引用。
- JNI References:与 JNI 交互相关的引用,包括 JNI 方法的局部变量、参数,以及显式创建的全局 JNI 引用——这些是本地代码调用 Java 对象时保留的引用。
扩展类型
除了上述核心类型,HotSpot 中还有部分特殊场景的对象会被认定为 GC Roots:
用作同步监视器的对象(即被
synchronized关键字锁定的对象);JVM 实现层面为特定功能保留的、不会被垃圾回收的对象,比如关键异常类实例、启动类加载器、仍有已加载类存活的自定义类加载器等。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

