java - 单例对象是否有资格进行垃圾收集?类中的静态字段如何被垃圾收集?
问题描述
我正在搜索 jvm 和垃圾收集如何在 java 应用程序中工作,我会知道 java 单例对象是否有资格使用 java 垃圾收集,类中的静态字段如何被垃圾收集?
我也知道现在在 java8 和最新版本中,对象的元数据存储在元空间中,但真正包含此元数据的是什么。
谢谢。
解决方案
静态变量仅在加载了该静态变量所属的类的类加载器也被垃圾收集后才会被垃圾收集。
除了引导类加载器之外的所有类加载器都可以进行垃圾收集,尽管这在大多数标准应用程序中很少发生,因为类加载器仅在以下情况下才会被垃圾收集:
- 类加载器加载的任何类都没有可达实例
- 没有由类加载器加载的可访问类(包括我们的静态变量所属的类)
- 类加载器本身不可访问
请注意,这是简单的解释,如果您有兴趣,还有更多详细信息,好的起点是Java 13 类卸载规范
推荐阅读
- function - 为什么我的脚本中出现函数错误?
- entity-framework - 使用依赖注入时使用存储库模式的多个 DB 上下文与 UnitofWork
- reactjs - SVG 笔划未显示在 clipPath 内部
- mongodb - 配置 AuthenticationManagerBuilder 以使用用户存储库
- facebook - 在使用 Facebook 的 Oauth 和 Python Flask 作为后端服务时卡住了
- azure - 使用 Graph API 创建 Azure SSO 应用程序
- coldfusion - 带有 ColdFusion 的 reCaptcha v3
- javascript - 在同一页面上处理 AJAX 请求 - PHP
- android - Android Studio 是否支持所有 Kotlin 功能和 API?
- python - 用硒进行网页抓取