-1

类加载器或类可以在 JVM 中死掉吗?我正在阅读一篇博客Oracle-垃圾收集和元空间。作者写道,当达到最大大小时,会在元空间上引发垃圾收集,结果死类加载器和类被垃圾收集

我想了解像对象变得无法访问一样是否也可以应用于类加载器和类?如果是,那么如何。

4

1 回答 1

4

我想了解像对象变得无法访问一样是否也可以应用于类加载器和类?

是的,类加载器和类在某些情况下可能变得无法访问。

  • 这仅适用于动态创建的类加载器以及它们加载的类。初始引导程序和应用程序类加载器是永久可访问的,它们加载的任何类 ( define) 都将是永久可访问的。

  • 有很多可达性路径,包括

    • 从一个类到它的父类加载器
    • 从类加载器到它加载的每个类
    • 从一个类到它所依赖的每个类
    • 从每个对象到它的类,以及
    • 从线程堆栈上的每个方法调用到定义该方法的类。

简而言之,如果应用程序有任何方法可以找到或使用(加载的)类或类加载器,那么它是可访问的。否则我们无法到达。

如果是,那么如何。

通过摆脱使类加载器及其类可访问的所有路径。就像你会做一个普通的物体一样。

(除了因为许多可达性路径在幕后而难以实现,应用程序代码无法直接破坏它们。因此,广泛使用动态类加载、动态代理等的应用程序可能会遭受元空间泄漏的问题.)

于 2020-01-23T06:51:20.277 回答