4

我正在尝试分析一个 ~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。

4

4 回答 4

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 论坛上找不到任何指示错误的信息。

于 2010-09-22T18:08:28.663 回答
2

看起来您使用的是 32 位 VM。Java VM 尝试将其整个内存空间保留在一个块中,这意味着根据您的系统 DLL 所在的位置,它可能无法获得那么多内存。切换到 64 位 VM(显然需要 64 位 CPU 和操作系统)应该可以解决这个问题。

于 2010-09-30T18:07:44.720 回答
1

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

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

在 Windows 7 中增加 JVM

希望对解决你的问题有帮助。。

于 2013-11-25T07:15:29.857 回答
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。

于 2010-09-23T09:24:10.053 回答