什么是类的 GC 根?
2022-08-31 22:10:32
在Java中,有一些特殊的对象称为垃圾回收根(GC根)。它们用作垃圾回收标记机制的根对象(见图)。
本文介绍四种类型的 GC 根目录:
- 局部变量
- 活动线程
- 静态变量
- JNI 参考
还提到:
类本身可以被垃圾回收。
不收集 GC 根,因此类本身不是 GC 根。
那么,这些类的GC根源是什么呢?
在Java中,有一些特殊的对象称为垃圾回收根(GC根)。它们用作垃圾回收标记机制的根对象(见图)。
本文介绍四种类型的 GC 根目录:
还提到:
类本身可以被垃圾回收。
不收集 GC 根,因此类本身不是 GC 根。
那么,这些类的GC根源是什么呢?
那么,这些类的GC根源是什么呢?
类加载器,有效地 - 通过其他GC根。
如果没有任何东西可以到达类装入器 - 这意味着没有任何东西可以到达该类装入器创建的任何类或这些类的任何实例 - 那么类装入器和它创建的类都有资格进行垃圾回收。保持它们处于活动状态直到那时是必要的,以便 Class::forName 和 ClassLoader::findClass 可以是幂等的,即使类的静态初始值设定项不是。
隐藏类(请参阅 https://openjdk.java.net/jeps/371)是此规则的例外。作为OpenJDK的实现细节,使用java.lang.reflect.Proxy的静态方法创建的方法引用,lambda和代理的类也是如此。类装入器不保存对这些类的强引用。