Java启动时出现java.lang.OutOfMemoryError: Java堆空间错误

4

几天前,我在启动MATLAB时遇到了一个java.lang.OutOfMemoryError: Java heap space异常 - 在运行任何代码或将任何内容添加到路径之前。 MATLAB加载的默认目录也没有文件。

我正在运行Windows 7 64位上的MATLAB R2012a。

可能是什么原因导致这种情况发生?


2
你在哪个平台上? - L0j1k
2
@L0j1k - 我使用的是Windows 7。我忘记了,有点傻,我会把它添加到问题中。 - olamundo
3个回答

1

使用java -Xmx -Xms选项启动您的应用程序,提供-

-Xmx <number> : max memory allocation to app
-Xms <number> : Min memory at startup

更具体地说:java -Xmx1800m将以最大内存分配1.8GB的设置启动JVM。默认情况下,JVM以-Xmx256m启动。 - Parker

1

如果您想在较新版本的Matlab中设置-Xmx参数,请前往首选项(位于工具栏/功能区上),然后

MATLAB > General > Java Heap Memory

那里有一个滑块。为了使其生效,Matlab将不得不重新启动。

然而,有一个 警告

注意:增加Java堆大小会减少用于存储数组数据的内存量。

我猜这意味着Matlab不会在其Java堆空间中存储数组。但是,如果我们只是设置上限,这是否重要?我认为不是。具体来说,当我将上述滑块设置为36 GB时,Matlab启动并立即将其虚拟内存(如top所示)增加到39.9 GB。但物理内存使用量仅约为300 MB。因此,除非它实际上将某些东西放入该堆空间中,否则将没有更少的物理内存可用于例如数组。因此,看起来可以忽略此警告。


如果您只能通过终端访问 Matlab 而无法获得图形界面,上述命令的效果是将以下行添加到~/.matlab/R2016a/matlab.prf中,因此您也可以手动执行此操作。
JavaMemHeapMax=I36532

使用滑块将偏好设置为36,532 MB并退出Matlab后,出现了这行文字。如果找不到matlab.prf文件,请检查此处

0

这是在启动时,即在我使用堆空间之前发生的……而且我是64位的,所以我怀疑那不是问题。 - olamundo
@noam -Xms设置堆的初始大小。 - Sathish

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