【发布时间】:2016-10-21 20:34:36
【问题描述】:
我的理解是Java没有内存泄漏。通过内存泄漏,我的意思是您无法再访问的内存(不是您可以访问的内存,但您没有)。下面是 C 中的一个示例:https://en.wikipedia.org/wiki/Memory_leak#A_simple_example_in_C
一位朋友将我链接到这两篇文章:
- https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/memleaks001.html
- https://www.toptal.com/java/hunting-memory-leaks-in-java
但是,我没有看到任何迹象表明 Java 实际上正在泄漏内存,只是存在程序员错误,例如:
- 存储过多不必要的数据(例如您不断追加的列表)
- 内存不足(需要更多 RAM/堆空间)
- 本机代码无法正确管理其内存
- 不关闭本机资源,例如流或数据库
- 可能是 JVM 中需要修复的错误
他还提到了循环引用,但我相信 Java 也可以处理这些,因为它的跟踪垃圾收集器。
我在这方面是正确的吗?除了我列出的问题之外,Java 是否有任何“真正的”内存泄漏?
【问题讨论】:
-
这篇文章可能会为你涵盖所有的基础 - stackoverflow.com/questions/4987357/…
-
在很多微妙的情况下,对象(尤其是内部类)可以保持不再需要的状态。
-
not enough memory altogether,好吧,如果你有无限量的内存,你就不会关心泄漏
标签: java memory-leaks