Java内部类内存泄漏

时间:2019-03-08 12:44:05

标签: java memory-leaks garbage-collection

假设我有这样的代码:

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引用了OuterClassOuterClass引用了InnerClass。因此,由于这两个对象都引用了它们,因此无法对其进行垃圾回收!

1 个答案:

答案 0 :(得分:1)

如果没有其他人引用该EntityManager.persist()实例,那么就没有“泄漏”(首先是一个很强的词)。

只要任何活动对象仍然引用p1 <- p1 + geom_line(data = subset(df, Year == 2006), aes(x = State, y = Total.Poverty / 1000), colour = "blue") ,就不能对内部类实例进行垃圾回收(毕竟,它仍然可以访问并在使用中)-并且内部类实例也将保留它的外部类实例仍然有效(因为可以从内部实例间接访问该实例)。

这与垃圾收集器的一般工作方式没有什么不同。它不会被参考周期抛出。当不再能从“活根”到达时,它可以可靠地收集整个周期。