【问题标题】:How to Find and Fix Memory Leaks in Nested Classes in Java?如何在 Java 中查找和修复嵌套类中的内存泄漏?
【发布时间】:2016-10-10 19:03:39
【问题描述】:

我发现内部类中内存泄漏的概念很难掌握。我找到的大多数答案都在 java 的上下文中,这进一步使像我这样的初学者感到困惑。

这里类似问题的大多数答案都重定向到这个:When Exactly is it leak safe to use anonymous inner classes?

同样,对于 OOP 的新手来说,这里的答案很难理解。

我的问题:

  1. 为什么内部类会发生内存泄漏?

  2. 使用内部类时,最常见的内存泄漏是什么? 会发生吗?

  3. 有哪些补救措施可以解决可能遇到的内存泄漏问题 经常?

【问题讨论】:

    标签: java class oop memory-leaks


    【解决方案1】:

    为什么内部类会发生内存泄漏?

    因为内部类维护着对外部类的引用。

    如果内部类实际上需要那个引用,这对于匿名类来说很常见,而外部类在其他情况下是不可访问的,那么由于该引用,它仍然不能被垃圾回收。

    这被认为是“泄漏”,即应该释放的内存没有被释放,只要保持对内部类的引用。

    使用内部类时,最常见的内存泄漏是什么?

    查看第一个问题的答案。

    对于经常遇到的内存泄漏有哪些补救措施?

    使用静态嵌套类而不是匿名、本地和内部类。顶级课程当然也是一种选择。

    这当然只有当内部类的生命周期超过外部类的生命周期时才需要。

    【讨论】:

    • 如果我使用静态内部类,我无法访问外部类的非静态字段。并且那些外部类字段需要是最终的。
    • 如果内部类确实需要外部类的所有(或大部分)字段,那么您就没有内存泄漏,因为您实际上需要该内存.
    猜你喜欢
    • 2014-12-29
    • 2015-09-29
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多