制作java应用程序的"内存转储"?

Rog*_*ach 13 java memory javafx-2

我有Java应用程序,不幸的是,它在一段时间后开始消耗相当大的内存.更复杂的是,它不仅是Java应用程序,也是JavaFX 2应用程序.

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

理想的解决方案是在某个时刻获取所有java对象的转储(使用它们的内存),然后分析该转储.有没有办法实现这个目标?

pjk*_*ser 15

使用jmap -heap:format=b <process-id>创建,然后可以装入几个工具堆的二进制转储-我最喜欢的是"月蚀内存分析器"


sar*_*can 6

有很多方法可以获得堆转储,从jmap这样的简单工具开始,再到像JVisualVM这样的更奇特的东西,甚至是像JProfiler这样的商业工具.正确解释这些转储可能会很棘手,因此您可能希望准确发布您正在寻找的内容.正在寻找内存泄漏,或者您是否有兴趣了解您的应用程序?


Edw*_*rzo 5

您可以使用jvisualvm。它有插件可以查看实时内存并从中获取转储。