我正在得到一个OutOfMemoryError: Java heap space
我可以使用任何工具来查找根本原因吗?
您可以使用一些分析工具(例如 eclipse mat)分析应用程序的堆转储,以查看哪些内容消耗了多少堆。
但首先您需要获取应用程序的堆转储。
拥有 JVM自动地当发生 OOM 错误时为您生成堆转储,您可以使用-XX:+HeapDumpOnOutOfMemoryError
选项。除此之外,您还可以使用-XX:HeapDumpPath
告诉 JVM 在哪里生成文件的选项。
java -XX:HeapDumpPath="D:\heapdumps\YourApp.hprof" -XX:+HeapDumpOnOutOfMemoryError -jar YourApp.jar
该文件生成后,您可以在 mat 中打开它并进行分析。
你也可以manually在应用程序运行时随时生成堆转储。为此,您可以使用jmap http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.htmljdk自带的命令。
jmap -dump:live,format=b,file="D:\heapdumps\YourApp.hprof" process_id_of_your_app
您可以使用该工具 -jps http://docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html,它也带有jdk,可以轻松找到您的应用程序的进程id。
jps -m
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)