java - 即使根线程引用了其子对象之一,GC 根线程不再可以访问父对象是否符合 Java GC 的条件?
问题描述
假设我们有以下课程
public class Parent {
public Child child;
public Parent(Child child) {
this.child = child;
}
}
public class Child {
public String someField;
}
我们的 main 中有以下代码
Parent parent = new Parent(new Child());
Child child = parent.child;
parent = null;
// then do other stuff
即使主根线程直接引用其内部字段/子项之一,在将其设置为 null 后,父项是否有资格进行垃圾收集?
解决方案
是的,它将有资格进行 GC,因为Child
没有对 的引用,当其变量设置为 null 时Parent
,不会留下对对象的引用。Parent
注意:这可以通过调用 System.gc() 来演示(用于测试目的),并覆盖 Parent 和 Child 中的 finalize() 方法。当 JVM 确定它已准备好进行 GC 时,将对对象调用该方法。
推荐阅读
- php - 我在 Ubuntu 14 上安装 cakephp 时遇到问题。* 请检查附件图片
- php - 无法使用 Axios 存储数据
- robotframework - 如何访问机器人框架中嵌套列表的值
- spring-data-rest - 如何在生产中禁用 HATEOAS?
- html - 对齐3列,中间列HR可调
- python - 错误:Scrapy 模块中的蜘蛛错误处理
- wordpress - Wordpress REST API:获取原始数据库内容
- ansible - JMESpath 表达式按属性过滤对象并返回具有此属性集的对象名称列表
- css - 模糊过渡时如何防止图像闪烁?
- c# - 如何使用 WHERE 执行 LINQ JOIN