类加载器或类在 JVM 中可以死吗?



类加载器或类在JVM中可以死吗?我正在阅读一个博客甲骨文 - 垃圾收集和元空间。作者写道,当达到最大大小时,在元空间上诱导垃圾收集,结果死类加载器和类被垃圾收集

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

我想

了解对象变得无法访问一样,也可以应用于类加载器和类吗?

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

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

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

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

简而言之,如果应用程序可以通过任何方法查找或使用(已加载的(类或类加载器,则可以访问它。 否则,我们将无法访问。

如果是,那么如何。

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

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

最新更新