Java内部类内存泄漏

标签 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;

问题:outerClass设置为null是否足够以避免内存泄漏? InnerClass引用OuterClass ,和OuterClass引用InnerClass 。因此,由于这两个对象都有对它们的引用,因此它们无法被垃圾收集!

最佳答案

如果没有其他人引用该 myInnerClass 实例,则不存在“泄漏”(这首先是一个非常强烈的词)。

只要任何 Activity 对象仍然引用 myInnerClass ,该内部类实例就不能被垃圾收集(毕竟,它仍然可以访问和使用)——并且该内部类实例还将保持其外部类实例处于 Activity 状态(因为可以从内部实例间接访问它)。

这与垃圾收集器的一般工作方式没有什么不同。它不会被引用循环抛弃。当无法再从“Activity 根”到达时,它会可靠地收集整个周期。

关于Java内部类内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55063503/

相关文章:

ios - 将 CollectionView 添加到 Collection View 单元格会导致内存增长

java - StringEntity 未在打印或套接字写入时对内容进行字符串化

java - 如何删除 JSF 中 <?xml ...?> 的第一行?

java - 为什么java 8注释@Contened使用128字节,这是大多数硬件上缓存行大小的两倍

C - 大输入时的内存泄漏

python - wxpython 应用程序中严重的内存泄漏

python - PyO3 中对象向量的垃圾收集

java - 从垃圾收集中驱逐非直观的对象

java - GC日志问题

java - 流中的 If 语句