java - 如何查找并修复 Java 嵌套类中的内存泄漏?

标签 java class oop memory-leaks

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

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

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

我的问题:

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

  2. 使用内部类时,最常见的内存泄漏有哪些 会发生吗?

  3. 对于可能遇到的内存泄漏有哪些补救措施 经常吗?

最佳答案

Why do memory leaks occur with the inner classes?

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

如果内部类实际上并不需要该引用(这对于匿名类来说很常见),并且外部类无法访问,但由于该引用,它仍然不可被垃圾回收。

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

When using inner classes, what are the most common memory leaks that can occur?

查看第一个问题的答案。

What are remedies to memory leaks that one can come across frequently?

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

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

关于java - 如何查找并修复 Java 嵌套类中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965070/

相关文章:

c++ - 类中 vector 的删除-删除习语问题

class - 在 Dao 类中使用静态方法还是非静态方法?

oop - 为什么大多数面向对象语言不支持协程?

java - 窄型还是加宽型?在我的公共(public) API 中返回什么

oop - 分解大成员函数

java - 集合列表返回重复项

javascript - 从 Vue.js 组件数据中导入的辅助类调用函数

java - 在java中取消链接复制的实例变量

java - 替换字符串中的值

java - 使用 Hibernate NamedNativeQuery,如何绑定(bind)这些参数 : WHERE (p1, p2) IN ((v1_1, v1_2), (v2_1, v2_2))