程序抛出OutOfMemoryError:在Mac中运行但不在Ubuntu中运行的Java堆空间

时间:2012-01-30 08:55:27

标签: java eclipse macos ubuntu heap-memory

这令人沮丧。我正在尝试运行一个程序,它将4000x3000图像加载到内存中。它在Ubuntu中运行良好但在Mac中运行不正常,抛出OutOfMemoryError:Java堆空间。这是我在Ubuntu中的eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=/usr/share/eclipse/dropins

至于Mac

-startup
../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.100.v20110502
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vm
/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/java
-vmargs
-Xms128m
-Xmx512m
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts

请注意,我已经尝试将Mac的PermSize内存Xmx和Xmx增加到大约1024米,但Mac仍然会抛出OutOfMemoryErrors。我只是尝试使它们相似,因为它在Ubuntu中运行得很好。

有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

这些是您的eclipse设置,而不是您的程序(我假设您没有将其构建为Eclipse组件)。除非您在运行配置中指定不同的颜色,否则您的程序将使用默认设置运行。

java启动时的默认值取决于多种因素,如体系结构,操作系统和可用RAM。所以它完全有可能从你的mac上的内存下限开始。

要解决此问题,请在两个系统上将Xmx设置为相同(同时确保它们位于相同的体系结构中,64位应用程序可能需要更多内存才能执行相同操作)。

答案 1 :(得分:1)

首先,您的错误与堆空间有关,因此更改Perm空间不会影响它。 其次,正如Joeri所指出的那样,eclipse.ini文件会影响Eclipse本身的运行方式,而不会影响您在Eclipse内部编写和运行的程序。

在启动配置上,转到参数选项卡,然后在标有 VM Arguments 的框中输入-Xmx参数。

如果您确定要始终希望所有启动配置都使用某些堆空间参数运行,则可以将它们分配给JRE。打开Eclipse Preferences并找到 Java>已安装的JRE 。从那里,选择您要使用的JRE,单击编辑按钮,然后您将找到默认Vm参数字段。如果在那里设置-Xmx(或任何其他JVM参数),它们将影响使用该JRE的任何启动配置。

答案 2 :(得分:0)

增加-Xmx参数的值