【发布时间】:2014-06-30 15:08:36
【问题描述】:
我知道内部类的实例必须绑定到包装类的实例,这让我质疑包装类实例在没有对它的引用但仍然有对它的引用时会发生什么绑定实例。
那么,一旦引用设置为 null,otr 引用的对象是否有资格进行垃圾回收?
class Outer
{
class Inner
{
}
}
class Test{
public static void main(String []args){
Outer otr = new Outer() ; // (1)
Outer.Inner oi = otr.new Inner() ; // (2)
otr = null ; // (3)
// more complicated code
}
}
【问题讨论】:
-
类的规则基本上与任何其他对象没有什么不同——当它们不再(强)可达时可以释放它们。 (但请注意,“不可达”与“没有引用它”不同。)
-
因此包装器实例仍然可以通过绑定到它的内部类的实例来访问?使其不符合收集条件?
-
作为一般规则,除非你在处理“弱”引用或“不安全”之类的东西,否则只要假设 GC 是神奇的,它可以工作,你不必考虑它。
标签: java garbage-collection inner-classes