Java后端系统面临垃圾收集器无法处理并存在内存泄漏的巨大负载。这怎么解决?解决垃圾收集器中的内存泄漏问题
回答
我非常怀疑这一点。内存泄漏,除非通过本机代码,实际上是内存膨胀的一种情况。内存膨胀只是具有强大引用的对象,从未被清除。
在Java中,您最终可能发生内存泄漏的唯一方法就是保留您不再需要的引用。由于您的应用程序仍然可以访问该引用,因此垃圾收集器将无法清除它,并且从垃圾收集器的角度来看,确实没有办法知道它是泄漏。
唯一要做的就是修复泄漏。至于如何找到并检测它们......我不幸没有很多建议。也许你可以在你的单元测试中添加代码来验证函数是否释放他们不再需要的内存?或者你可以运行你的单元测试,大大减少虚拟机的内存,以确定哪些单元负责最多的分配?有一些模式通常会导致泄漏。例如,保存一个较大字符串的子字符串(例如,如果您将文件读入一个字符串中),因为子字符串保留对它来自的字符串的引用。我想可以编写一个程序来检测这个和其他导致泄漏的常见模式。但是,我不知道有任何目前可用的程序可能会发生这种可能的泄漏检测。
除非您使用的是不寻常的JVM实现方式,否则仅当您坚持对象的时间超过所需时间时才会真正发生内存“泄漏”。如果Java检测到某个对象仍然可以访问,它将永远不会收集它,因为它可能会影响程序语义。
如果您有兴趣减少内存使用量,请尝试重新引用不再需要的对象的引用,或者使用WeakReference
或WeakHashMap
来存储对象,以便可以自动回收对象。
如果您想尝试追查究竟是在内存中浪费的空间,您可能需要查看this paper通过查看对象访问来检测潜在的内存泄漏。这个工具显然工作得很好,虽然我不太熟悉它。
希望这会有所帮助!
jmap是你的朋友。在当前(sun/oracle)JVM中有一些泄漏,但我非常怀疑OP是在说什么。 终结器与幻影引用(impl by java.lang.ref.FinalReference;它们不会混淆它自己的GC,使finalize方法可用的对象有些不同)
- 1. Cocoa垃圾收集泄漏内存
- 2. 垃圾收集器对象的内存泄漏
- 3. 在.NET垃圾收集器与System.Transactions.SafeIUnknown内存泄漏
- 4. Chrome的内存/垃圾收集问题
- 5. 内存泄漏/形式不被垃圾收集
- 6. 垃圾收集泄漏?脚本桥梁泄漏?
- 7. 内存泄漏 - 缺少垃圾回收器
- 8. 帮我解决内存泄漏问题
- 9. 垃圾收集问题Android
- 10. Java垃圾收集问题
- 11. 以下情况称为java中的内存泄漏?这不是垃圾收集?
- 12. C#垃圾收集器问题
- 13. TDictionary中的内存泄漏 - 解决方法存在问题?
- 14. 垃圾收集器
- 15. 解决SpellCheckerSession泄漏问题?
- 16. 潜在的泄漏(使用垃圾收集时)
- 17. WPF和棱镜4.1垃圾收集/内存问题
- 18. 了解Actionscript垃圾收集
- 19. 解决在$ .post中使用Javascript/jQuery内存泄漏问题
- 20. Node.js的垃圾收集器
- 21. Objective-C内存泄漏了解问题
- 22. 垃圾收集缓存WeakMaps
- 23. 了解Firefox 32垃圾收集器
- 24. 当Java的垃圾收集器回收内存?
- 25. 可可垃圾收集问题
- 26. 这会导致垃圾收集问题
- 27. 我该如何解决这个内存泄漏问题? NSInvocation的
- 28. 如何解决MQTT应用程序的内存泄漏问题?
- 29. 内存泄漏问题iPhone
- 30. C++内存泄漏问题
这不是Java Java的工作方式... – 2011-01-09 04:03:22
这功能吗? – Mehrdad 2011-01-09 04:35:03