我有一个类似于以下的 spring bean:
public class MyServiceImpl {
private MyDAO myDAO;
public class MyInnerClass implements SomeInterface<MyInnerClass> {
@Override
public MyInnerClass loadFreshObject(final String key) {
return myDAO.load(key);
}
}
}
实例MyInnerClass
正在 spring bean 外部的代码中创建,但不保留对这些实例的引用。
假设我无法控制这些公共非静态内部类的使用(我知道理想情况下这些内部类将是私有的和静态的,以避免泄漏对“this”的引用),“MyInnerClass”创建的实例是否会被正确地垃圾收集?
我已经通过覆盖来对此进行了自己的测试finalize()
看来这些实例正在正确地被垃圾收集,我只是希望对此进行澄清。
Thanks
内部类的实例将根据正常规则(即当它们不再被引用时)被垃圾收集。但是,内部类的每个实例都包含对其外部类的父实例的隐藏引用。这意味着,如果存在对内部类实例的任何实时引用,它们将阻止外部类的关联实例被垃圾收集。但它只朝那个方向起作用,而不是朝相反方向起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)