首页 > 解决方案 > 单例对象是否有资格进行垃圾收集?类中的静态字段如何被垃圾收集?

问题描述

我正在搜索 jvm 和垃圾收集如何在 java 应用程序中工作,我会知道 java 单例对象是否有资格使用 java 垃圾收集,类中的静态字段如何被垃圾收集?
我也知道现在在 java8 和最新版本中,对象的元数据存储在元空间中,但真正包含此元数据的是什么。
谢谢。

标签: javajvm

解决方案


静态变量仅在加载了该静态变量所属的类的类加载器也被垃圾收集后才会被垃圾收集。

除了引导类加载器之外的所有类加载器都可以进行垃圾收集,尽管这在大多数标准应用程序中很少发生,因为类加载器仅在以下情况下才会被垃圾收集:

  • 类加载器加载的任何类都没有可达实例
  • 没有由类加载器加载的可访问类(包括我们的静态变量所属的类)
  • 类加载器本身不可访问

请注意,这是简单的解释,如果您有兴趣,还有更多详细信息,好的起点是Java 13 类卸载规范


推荐阅读