当我从MyEclipse运行或调试我的GA / AI时,我收到此错误:
线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间
eclipse.ini看起来像这样:
-showsplash com.genuitec.myeclipse.product
--launcher.XXMaxPermSize 256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M
MyEclipse的调用方式如下:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms1448M -Xmx1448M
将vm设置从中突然出现:
"C:\Program Files\MyEclipse 6.0\eclipse\eclipse.exe" -vm "C:\Program Files\MyEclipse 6.0\jre\bin\javaw.exe" -vmargs -Xms80M -Xmx1024M
没有效果。所以我试图让它将堆转储到一个文件,但放置这些:
-XX:+HeapDumpOnCtrlBreak
-XX:+HeapDumpOnOutOfMemoryError
程序中的参数没有效果。如何使用更多的内存使用情况分析?例如,jstack目前在Windows平台上不可用。并且使用SendSignal没有我能看到的效果。
答案 0 :(得分:11)
有许多方法可以获得堆转储。以下是我使用过的一些内容:
-XX:+HeapDumpOnOutOfMemoryError
应该让你在你的OOM上转储。如果您正在运行Java 6,jmap应该适用于Windows。如果要转储堆并且没有命中OOM,这可能很有用。使用Windows任务管理器查找Java应用程序的pid,并在控制台中运行:
jmap -dump:format=b,file=c:\heap.bin <pid>
除了VisualVM之外,Eclipse Memory Analyzer(也是免费的)可以帮助您分析在转储后占用所有空间的内容。
答案 1 :(得分:2)
-XX:+HeapDumpOnOutOfMemoryError
应放在“VM Arguments
”而不是“Program Arguments
”
答案 2 :(得分:1)
您可以使用JConsole监视内存使用情况。
jstat也会有所帮助。