我不知道怎么回答这个问题。相反,我告诉他们我在 Web 应用程序 中没有看到任何可能发生内存泄漏的实际代码/情况。我还告诉他,如果创建的对象过多并且这些对象超出范围,GC 将负责回收内存。
我的问题是 (1) 我的回答够好吗? (2) 能否给我一个 Web 和/或非 Web 环境中 Java 内存泄漏的实际示例?
谢谢
最佳答案
好主题!
您需要先监控 Java 内存消耗。
最简单的方法是使用每个 JVM 附带的 jstat
实用程序。
jstat -gcutil <process_id> <timeout>
它将报告每一代(Young、Eldery 和 Old)的内存消耗和垃圾收集时间(Young 和 Full)。
一旦您发现完整垃圾收集执行得太频繁并且花费太多时间,您就可以假设应用程序正在泄漏内存。
然后您需要使用 jmap
实用程序创建内存转储:
jmap -dump:live,format=b,file=heap.bin <process_id>
然后你需要用内存分析器分析heap.bin文件,例如Eclipse Memory Analyzer (MAT)。
MAT 将分析内存并为您提供有关内存泄漏的可疑信息。
关于java - 在一次采访中有人问我如何检测 Java 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50881376/