对 Java 应用程序进行“内存转储”?

2022-09-03 10:08:33

我有Java应用程序,不幸的是,一段时间后开始消耗大量的内存。更复杂的是,它不仅是Java应用程序,它还是JavaFX 2应用程序。

我怀疑存在一些内存泄漏,甚至可能在底层JavaFX调用和本机lib中。

理想的解决方案是在某个时刻获取所有Java对象的转储(及其内存使用情况),然后分析该转储。有没有办法做到这一点?


答案 1

用于创建堆的二进制转储,然后可以将其加载到多个工具中 - 我最喜欢的是“Eclipse Memory Analyzer”jmap -heap:format=b <process-id>


答案 2

有很多方法可以获得堆转储,从简单的工具(如jmap)到更花哨的东西(如JVisualVM),甚至是像JProfiler这样的商业工具。但是,正确解释这些转储可能很棘手,因此您可能希望准确发布所需的内容。您是否正在寻找内存泄漏,或者您是否有兴趣对您的应用程序有一个大致的了解?