如果你的系统是32位系统(进程最大支配2G空间,另外2G给系统进程了),在使用matlab 运行耗内存程序时候,会可能出现 out of memory 错误。这是因为matlab没有足够内存可以使用的缘故。解决的简单方法是加内存和升级为64位系统了。
matlab具体能支持多大的数据呢?我们可以使用memory命令来查询。可以在matlab命令行输入 memory 看看你的系统的限制
我的系统是:
memory
Maximum possible array: 1451 MB (1.521e+009 bytes) * 当前系统数组能占的最大内存
Memory available for all arrays: 1451 MB (1.521e+009 bytes) * 当前系统变量可被分配的空间
Memory used by MATLAB: 126 MB (1.320e+008 bytes) 已经使用的内存熟练
Physical Memory (RAM): 2038 MB (2.137e+009 bytes) 系统物理内存数量
* Limited by System Memory (physical + swap file) available. 打星号表示受限于系统内存和交换空间的大小
除了升级内存和升级64位系统外,下面几个方法也是解决之道。
# 增加虚拟内存
# 采用PACK (在命令行输入 pack 整理内存空间)
# 采用3GB 开关启动系统(修改 c盘根目录 boot.ini 启动选项加上 /3G 例如:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3G
# 优化程序,减少变量 (使用稀疏矩阵 sparse ) save 保存变量 clear 变量 load 变量,需要时再读出来
# 如果必有必要,不要启动java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的 "..../matlab.exe") 改为("...../matlab.exe" - nojvm)
#关闭Matlab Server
# 使用 单精度 single 短整数替代 双精度。
关于 3G 开关 和 matlab 的其他优化措施,在本博客另外一篇文章另有详细论述。