sho*_*uck 2 java garbage-collection memory-leaks memory-management
我不知道如何回答这个问题。相反,我告诉他们我没有在Web 应用程序中看到任何可能发生内存泄漏的实际代码/情况。我还告诉他,如果创建的对象太多并且这些对象超出范围,GC会负责回收内存。
我的问题是(1)我的回答是否足够好?(2) 能否请您举一个 Web 和/或非 Web 环境中 Java 内存泄漏的实际示例?
谢谢
好话题!
您需要先监视 Java 内存消耗。
最简单的方法是使用jstat每个 JVM 附带的实用程序。
jstat -gcutil <process_id> <timeout>
Run Code Online (Sandbox Code Playgroud)
它将报告每一代(Young、Eldery 和 Old)的内存消耗和垃圾收集时间(Young 和 Full)。
一旦您发现 Full Garbage Collection 执行过于频繁并花费太多时间,您就可以假设应用程序正在泄漏内存。
然后您需要使用jmap实用程序创建内存转储:
jmap -dump:live,format=b,file=heap.bin <process_id>
Run Code Online (Sandbox Code Playgroud)
然后您需要使用内存分析器,例如 Eclipse 内存分析器 (MAT) 来分析 heap.bin 文件。
MAT 将分析内存并为您提供有关内存泄漏的可疑信息。