我正在尝试分析一个~800mb的堆转储,这需要比我的eclipse标准更大的堆。但是,当我转到eclipse.ini文件并设置-Xmx2g
(或-Xmx2048m
)时,我收到错误“无法创建Java虚拟机”。
1)是的,我有足够的记忆力。 2)我可以将它改为-Xmx976m。 3)我尝试过独立的MAT分析器,它与-Xmx1024m配合使用,而不是一个字节。 4)不,1gb不足以分析该堆,我得到一个OOM
这是日食错误:
这是MAT错误:
(我认为它们是相同的,这只是你可以看到一个MAT的例子)
我当前的eclipse.ini(工作)是:
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.0.v20100503
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
有人想出来了吗?
谢谢!
F。
答案 0 :(得分:5)
你看到的这个问题出现在我认为的Windows上吗?
我有同样的问题。看完你的问题后,我再次出去挖掘。我刚刚找到了解决问题的方法。如果是相同的尝试。 在Eclipse或MemoryAnalyzer ini文件中,从Xmx选项中删除 - 。然后我的ini文件变成了
-vmargs
Xmx1536m
现在就像一个有更多记忆的魅力。 感谢Alex2308在此主题http://troyworks.com/blog/2008/06/08/eclipse-jvm-terminated-exit-code-1/comment-page-1/#comment-80
中的评论我之前的解决方案是获取Linux Live光盘。启动到Linux然后我能够在没有问题的情况下在MAT中分配2g。 (确保你获得Linux的MAT)
不是最好的解决方法,但我在MAT论坛上找不到任何指示错误的内容。
答案 1 :(得分:2)
看起来你在32位虚拟机上。 Java VM尝试在单个块中保留其整个内存空间,这意味着根据系统DLL所在的位置,它可能无法获得那么多内存。切换到64位虚拟机(显然需要64位CPU和操作系统)应该可以解决这个问题。
答案 2 :(得分:1)
您是否在Java控制面板中修改了Java Runtime Environment设置?通过在运行时参数列中添加运行时参数,例如-Xmx3072m。
也许你可以在这里查看详细信息..
希望它有助于解决您的问题..
答案 3 :(得分:0)
我已经创建了一个假应用来测试jvm params,我发现JVM似乎没有在windows中交换,至少不会形成启动。 我有4GB的ram,但它只允许我分配剩余的可用空间。奇怪的是它对于不同的appps有什么不同:我的假应用允许我上升到Xmx1380m,而eclipse只上升到Xmx1024m。
错误如下:
$ java -jar -Xmx1500m "C:\fakeapp.jar"
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
同样的事情,但-Xmx1380g和应用程序运行良好。
在unix中从来没有遇到过这个问题,即使它直接进行交换,堆也会以你说的大小开始。
对于在Windows上遇到此问题的任何人: 首先检查ctrl + shift + esc - >表现 - >生理记忆;并将Xmx设置为与“可用”中显示的值相同。
如果有人能说出如何阻止JVM在开始之前检查你是否真的有足够的可用内存,那将会很酷。我正在使用的1.5g工作,因为我正在处理一个只有800mb的堆转储,但是如果它稍微大一些我就没有在哪里运行......
欢呼声,
F。