在Java中,有一些特殊对象,称为垃圾收集根(GC根)。它们充当垃圾收集标记机制的根对象(请参见图片)。
This article描述了四种GC根类型:
还提到:
没有收集GC根,因此类本身不是GC根。
那么类的GC根是什么?
最佳答案
通过其他GC根有效地实现类加载器。
如果没有任何东西可以到达类加载器-这意味着没有东西可以到达该类加载器创建的任何类或这些类的任何实例-那么该类加载器及其创建的类都可以进行垃圾回收。使它们保持 Activity 状态直到那时是必须的,这样即使在类的静态初始化器没有作用时,Class::forName和ClassLoader::findClass也可以是幂等的。
隐藏类(请参阅https://openjdk.java.net/jeps/371)是该规则的异常(exception)。作为OpenJDK的实现细节,使用java.lang.reflect.Proxy的静态方法创建的方法引用,lambda和代理类也是如此。类加载器没有对这些类的强引用。