Eclipse内存分配问题

4
我正在尝试分析一个大约800MB的堆转储文件,这需要比我的eclipse标准配置更大的堆。然而,当我打开eclipse.ini文件并设置-Xmx2g(或-Xmx2048m)时,我会收到“无法创建Java虚拟机”的错误消息。
1)是的,我的内存足够。2)我可以将其改为-Xmx976m。3)我已经尝试过独立的MAT分析器,它可以使用-Xmx1024m工作,但不能再多。4)不,1GB的内存不足以分析该堆转储文件,我会遇到OOM。
这是eclipse的错误信息: alt text 这是MAT的错误信息: alt text (我认为它们是相同的,这只是为了让您看到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.

命令行中的“-vmargs -Xmx1g”也不起作用。 - filippo
你尝试过通过命令行为JVM分配堆内存吗?你能够分配多少?(java -Xmx<value>) - Sagar V
嗯,有趣...我创建了一个虚假的应用程序来测试JVM参数,发现在Windows中JVM实际上不会进行交换。我会发布一个答案。 - filippo
4个回答

5

我猜你遇到的问题是在Windows系统上吧?

我之前也遇到过同样的问题。看完你的问题后,我又去找了一下解决方法。最终我找到了一个解决方案,如果你的问题相同,可以试试看。 在你的Eclipse或MemoryAnalyzer ini文件中,将Xmx选项中的-号删除即可。我的ini文件就变成了:

-vmargs
Xmx1536m

多亏了Alex2308在这个帖子中的评论,现在更大内存情况下很好用。


我之前的解决方案是使用Linux Live光盘启动到Linux,然后我就可以在MAT中分配2g的内存而没有任何问题。(请确保你获取的是适用于Linux的MAT版本)

虽然不是最佳的解决方法,但我在MAT论坛上无法找到任何有关错误的信息。


嗨,伙计,我已经尝试过了,但虽然jvm启动了,但它没有使用内存设置。你确定它对你起作用了吗?检查帮助->关于->安装详细信息->配置。它将向您显示实际配置。没有破折号,我的堆仍然是64mb :( - filippo
是的,它肯定起作用了。我能够打开之前无法打开的文件,并使用visualVM确认了内存占用情况。附:我正在使用独立版MAT。 - Sean
哦...这真是非常奇怪。我也对独立的材料做了同样的操作。最新版本在右下角有一个带有内存状态的条形图,鼠标悬停时会显示详细信息(最小值、最大值、标记),我也确认过了...这可能不是一个错误,但他们确实可以让内存配置更清晰一些:( - filippo

2

看起来你正在使用32位虚拟机。Java虚拟机试图在单个块中保留其整个内存空间,这意味着根据系统DLL的位置可能无法获得那么多内存。切换到64位虚拟机(需要64位CPU和操作系统)应该可以解决这个问题。


1

你是否在Java控制面板中修改了Java运行时环境设置?例如,在运行时参数列中添加了运行时参数,如-Xmx3072m。

也许你可以在这里查看详细信息...

在Windows 7中增加JVM

希望这能帮助解决你的问题。


0
我创建了一个虚假的应用程序来测试JVM参数,发现JVM在Windows中似乎不会进行交换,至少不是从启动开始。我有4GB的内存,但它只允许我分配剩余的可用空间。奇怪的是,不同的应用程序工作方式不同:我的虚假应用程序允许我达到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。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接