最近我收到了臭名昭着的错误消息:OutOfMemoryError
。我有一台配备16GB Ram和2X2.6 GH四核的64Bit Mac。获取此错误消息对我来说没有意义,因为我正在运行的相同算法(导致此错误消息)在另一台计算机(ubuntu 16GB Ram)上运行顺利。
System.out.println(java.lang.Runtime.getRuntime().maxMemory());
当我在我的Mac上运行上面的代码时,我得到:129,957,888(当然没有逗号: - ))
当在ubuntu机器上运行此代码时,我得到:1,856,700,416
有人能告诉我如何增加最大内存以运行算法吗?谢谢!
我试图设置我的eclipse:默认VM参数-Xms512m -Xmx4g
,但没有任何改变。
答案 0 :(得分:6)
-Xmx
和-Xms
是java
命令更改堆大小的正确参数,但是Eclipse has to be configured differently。
答案 1 :(得分:1)
你将不得不详细说明。您是在Eclipse中运行测试还是在Eclipse之外运行?只是将“-Xmx”参数传递给Eclipse将无法执行您想要的操作,即使您以正确的方式执行它以实际更改Eclipse的max mem值(需要在其前面加上“-vmargs”)。如果要更改运行算法的分叉JVM的max mem值,则必须更改运行配置中的参数。
答案 2 :(得分:0)
看起来亚光b覆盖了这个。我只想提一下,你可能不想将最大堆大小设置为高达4GB,除非你的程序真的需要那么多。根据我的理解,JVM在启动时为自己分配所有内存,然后根据需要使用它来运行代码。使它分配那么多内存可能会导致您正在运行的其他应用程序出现性能问题。相反,如果您的代码需要很长时间才能失败,请尝试以128MB或更多的增量进行升级。或者,您可以使用内存分析器查看实际使用的空间大小?我不知道是否存在这样的事情。
这可能不是你设置的问题,但对于像我这样的凡人来说,轻率地分配那么多内存可能会有问题。