假设我有这样的代码:
public class OuterClass{
InnerClass myInnerClass = new InnerClass();
public class InnerClass{
}
}
// somewhere I have created an OuterClass instance:
OuterClass outerClass = new OuterClass();
// do something
// ...
outerClass = null;
问题:是否足以将仅外部类设置为null
以避免内存泄漏? InnerClass
引用了OuterClass
,OuterClass
引用了InnerClass
。因此,由于这两个对象都引用了它们,因此无法对其进行垃圾回收!
答案 0 :(得分:1)
如果没有其他人引用该EntityManager.persist()
实例,那么就没有“泄漏”(首先是一个很强的词)。
只要任何活动对象仍然引用p1 <- p1 + geom_line(data = subset(df, Year == 2006),
aes(x = State, y = Total.Poverty / 1000), colour = "blue")
,就不能对内部类实例进行垃圾回收(毕竟,它仍然可以访问并在使用中)-并且内部类实例也将保留它的外部类实例仍然有效(因为可以从内部实例间接访问该实例)。
这与垃圾收集器的一般工作方式没有什么不同。它不会被参考周期抛出。当不再能从“活根”到达时,它可以可靠地收集整个周期。