matlab内存溢出的解决方案

(1) 增加虚拟内存:cmd -> taskmgr 打开任务管理器,查看物理内存和虚拟内存,可观察matlab在运行过程中是否超过物理内存和虚拟内存。若超过,增加虚拟内存的方法是不可行的。物理内存不足的时候可以通过将电脑的虚拟内存设置得大一点,可一定程度上缓解内存不足的压力,但缓解是非常有限,核心还是增加物理内存。

查看虚拟内存方法:

(1a)右击“我的电脑”–属性–高级系统设置—-系统属性—–高级—-在性能框内点“设置”
(1b)性能选项对话框,点第二个标签“高级”
(1c)页面文件大小后面的数字就是虚拟内存。
(1d)若分页文件大小0,表示没有设置虚拟内存

增加虚拟内存方法
重复(1a)->(1d),
(1e)点击性能选项-高级-更改,取消选定的虚拟内存页面顶部的复选框,然后点击系统所在的驱动器,接着点击自定义大小,可在空白框中输入你索要设置的虚拟内存的大小即可。
matlab内存溢出的解决方案_第1张图片

(2)使用PACK:PACK可以将matlab中的变量导出到磁盘中,以增加可用内存。

如何使用PACK:
当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。
help文件 用法:
pack
pack filename
pack(‘filename’)

pack可以为用户整理内存的机制在于,pack函数重新整理MATLAB工作空间中驻留的变量,将原来断断续续的内存整理的连续起来,这样原来断断续续的内存可能不足以存储大的矩阵,而整理之后,可以很显著的提高内存的使用效率,最后重新分配的空间将是连续的,避免掉原来断断续续的内存使用。整理步骤:
(1)将base空间以及全局变量保存到一个mat文件
(2)清空工作空间中的所有资源
(3)重新载入mat文件中保存的base空间变量和全局变量,然后删掉mat文件

备注: pack不能提高MATLAB所拥有的虚拟内存数量,如果想要增加这个数量,也就是使MATLAB单独变量的最大size或者同时存在的变量所占有的最大空间增大,需要提高系统的虚拟内存。

Change the current folder to one that is writable, run pack, and return to the previous folder.

cwd = pwd;
cd(tempdir);
pack
cd(cwd)
feature('memstats') % 查看matlab内存使用情况

(3) 打开计算机的3GB开关(64位的WIN7不用调)。

3GB切换(3GB switch):由于在windows上运行matlab时,如果内存的使用超过约1.7G左右就要出现这种错误,而无论你有多大的内存也没用。MATLAB现在支持3GB切换(3GB switch)启动选项(boot option),配置额外的1GB的可寻址内存到每个程序上。这增加了你可以储存到MATLAB workspace中资料的总量约到2.7 GB。这相当于33亿的精度值。此新增的内存区块和MATLAB使用剩下的(内存)并不是连续的,所以你不能建立一个数组来填满此空间。

具体做法:修改C:\ Boot.ini文件如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS = “Microsoft Windows XP Professional”
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=”Microsoft Windows XP Professional” /3GB
注意后面的/3GB就是后加上的。重新启动系统再次运行matlab。
打开3GB的目的:32位系统(包括XP和32位的win7),默认情况下不允许某个程序调用超过2G的内存,一旦超过,就自动结束掉该程序。因此打开3GB,就是为了允许大型程序,比如3DMAX,调用最多3G的内存


matlab java.lang.OutOfMemoryError

Java虚拟机内存不够用了.可以增加最大内存设置.

  1. 查找matlab根路径.在matlab命令行中敲入:matlabroot
    显示根路径,如:D:\CMWang\MATLABR2014b

2.查看当前Java虚拟机最大堆内存, 敲入:

java.lang.Runtime.getRuntime.maxMemory

3.查看Java虚拟机版本.敲入:

version -java

4.在 $MATLAB\bin\$ARCH 路径下新建java.opts文件.

MATLAB,D:\CMWang\MATLABR2014bARCH是系统架构.例如win64,则在D:\CMWang\MATLABR2014b\bin\win64下新建java.opts文件.

5.用记事本打开java.opts文件,对于不同的版本的Java虚拟机,输入:

The following table shows the default settings MATLAB uses for versions of the JVM:

JVM Initial Heap Size Max Heap Size
1.6.0 -Xms64m -Xmx128m (32-bit)
-Xmx196m (64-bit)
1.5.0 -Xms64m -Xmx96m (32-bit)
-Xmx128m (64-bit)
1.4.2 -Xms16m -Xmx96m
1.3.1 -Xms16000000 -Xmx64000000
1.2.2 -Xms16000000 -Xmx64000000
1.1.8 -ms16000000 -mx64000000

例如我的Java是1.4.2,在java.opts文件写入-Xmx96m,保存就ok啦
如果输入错误就报错:warning : Failed to start to Java Virtual machine
6. 重启matlab,敲入

java.lang.Runtime.getRuntime.maxMemory

显示最大内存改变,设置成功.

备注: 可在matlab->file->preference->General->Java Heap Memory,可以设置Java Heap Memory大小,其最大可以设置的值是内存大小的1/4。如果想用的Java Heap Memory大于内存的1/4,无法利用Preference进行设置。

采用上述在Matlab安装目录下添加java.opts的方法,可以任意设置Java Heap Memory的大小,当设置的大小小于内存的1/4时,Preference中Java Heap Memory面板显示的是相应的值;当大于内存的1/4时,面板显示值是其最大值,但实际上使用的却是我们在java.opts中设置的大小。设置Java Heap Memory面板的主要目的是防止一些人任意改变,破坏操作系统.

主要参考:

http://cn.mathworks.com/matlabcentral/answers/92813-how-do-i-increase-the-heap-space-for-the-java-vm-in-matlab-6-0-r12-and-later-versions

http://cn.mathworks.com/matlabcentral/answers/99763-why-do-i-receive-a-java-exception-when-starting-matlab-6-5-r13-or-later

http://blog.sina.com.cn/s/blog_890c6aa30101b5fy.html

你可能感兴趣的:(java,matlab)