3

最近我收到了臭名昭著的错误消息:OutOfMemoryError. 我有一台 64 位 Mac,配备 16GB 内存和 2X2.6 GH 四核。收到此错误消息对我来说根本没有意义,因为我正在运行的相同算法(导致此错误消息)在另一台机器(ubuntu 16GB Ram)上顺利运行。

System.out.println(java.lang.Runtime.getRuntime().maxMemory()); 

当我在我的 Mac 上运行上面的代码时,我得到:129,957,888(当然没有逗号:-))

在 ubuntu 机器上运行此代码时,我得到:1,856,700,416

谁能告诉我如何增加最大内存以运行我的算法?谢谢!

我试图在我的 eclipse: default VM arguments 上设置-Xms512m -Xmx4g,但没有任何改变。

4

3 回答 3

6

-Xmx并且是更改堆大小-Xms的命令的正确参数,但必须以不同方式配置 Eclipsejava

于 2011-10-26T15:32:31.330 回答
1

你将不得不详细说明。您是在 Eclipse 中还是在 Eclipse 之外运行测试?仅将“-Xmx”参数传递给 Eclipse 不会做您想做的事情,即使您以正确的方式实际更改 Eclipse 的最大 mem 值(这需要在其前面加上“-vmargs”)。如果要更改运行算法的分叉 JVM 的最大内存值,则必须更改运行配置中的参数。

于 2011-10-26T15:41:07.060 回答
0

看起来马特 b 已经覆盖了这个。我只是想提一下,您可能不想将最大堆大小设置为 4GB,除非您的程序真的需要那么多。据我了解,JVM 在启动时会为自己分配所有内存,然后根据需要使用它来运行代码。让它分配那么多内存可能会导致您正在运行的其他应用程序出现性能问题。相反,如果您的代码需要很长时间才能失败,请尝试以 128MB 或更多的增量来增加它。或者,也许您可​​以使用内存分析器来查看您实际使用了多少空间?我不知道这样的事情是否存在。

这在您的设置上可能不是问题,但对于像我这样的普通人来说,愉快地分配这么多内存可能会有问题。

于 2011-10-27T14:30:34.787 回答