Matlab内存不足问题的解决 .

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

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

2.查看当前Java虚拟机最大堆内存, 敲入:java.lang.Runtime.getRuntime.maxMemory

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

4.在 $MATLAB\bin\$ARCH 路径下新建java.opts文件.
$MATLAB是根路径,例如C:\MATLAB7
$ARCH是系统架构.例如win32,则在C:\MATLAB7\bin\win32下新建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
显示最大内存改变,设置成功.

转自:http://hi.baidu.com/albertleemon/blog/item/d66384089786d5c262d986c4.html

转载于:https://www.cnblogs.com/hualimengyu/p/3593799.html

改善Matlab的运行效率 一叶方舟 2012.04 1. 改善运行的技巧 1.1 分析程序的运行状况 1) Profiler工具 使用Profiler工具找到话费时间比较多的代码行的位置并优化这些代码 2) 查看运行时间的函数 tic --程序段 time=toc 3) 计算短程序运行所花费的时间 有的程序很短,运行时,速度太快,以至于使用tic和toc不能得到有用的信息,可尝试把程序放到一个循环中来计算 tic for k=1:100 --运行程序100次 end toc 1.2 循环矢量化 1) 矢量化方法 矢量化是指将for循环和while循环转换为等价的矢量或矩阵操作 2) 使用矢量化的函数 Table 1 MATLAB中使用了矢量化的函数 all diff ipermute permute reshape squeeze any find logical prod shiftdim sub2ind cumsum ind2sub ndgrid repmat sort sum 1.3 数组的内存预分配 1) 给数组预分配内存 预分配使得不必在每次数组变大时进行改变,针对不同类型的数组使用合适的预分配函数 数组类型 预分配函数 示例 数值数组 zeros y=zeros(1,100) 单元数组 cell B=cell(2,3); B{1,3}=1:3; B{2,2}=’string’; 结构数组 struct repmat data=repmat(struct(‘x’.[1 3],… ‘y’,[5 6]),1,3); 2) 给非double型矩阵预分配内存 下面的语句用zeros函数预分配一个uint8型100*100的矩阵,首先,创建一个double型满秩矩阵,然后把矩阵转换为uint8型,这将导致不必要的时间和内存花费 A=int8(zeros(100)); 使用repmat函数,只需要创建一个double值,从而减少了对内存的需求 A=repmat(int8(0),100,100); 在不能进行预分配的时候,看是否能通过repmat函数使数组变大,用repmat函数扩展矩阵时,可以获得连续的内存块 1.4 其他方法 1) 用MEX文件编写循环代码 必须使用for循环时,把它写为MEX文件,因为不必在每次运行循环中的语句时都对他们进行解释 2) 操作实型数据 MATLAB特意为实数设计了一些函数,如reallog,realpow,realsqrt等 3) 函数比脚本运行更快 4) 使用load函数和save函数比Matlab文件I/O过程更好 5) 避免大型后台处理 2. 程序运行情况监测-Profiler Profiler是一个能够检测程序运行状况的工具,它告诉你M文件中哪些代码行最花费时间,哪些行被调用的次数最多,然后就可以利用上面的方法对这些代码进行改进。 其实也可以使用Profiler理解文件,对于很长不是自己创建的M文件,或者其他不熟悉的M文件,可以使用Profiler查看M文件是如何工作的,用详细报表查看隔行的实际调用情况。 3. 使用Profile函数 Profiler的运行是基于profile函数返回的结果的,但有一些profile函数具有的特点Profiler中并没有,具体查看help 4. 有效使用内存 1) 内存管理函数 使用下面这些函数,可以帮助在Matlab中管理内存 (1) whos函数:显示给工作空间中的变量分配了多少内存 (2) pack函数:把已经存在的变量保存到磁盘,然后重新存入,这将减少因为内存碎片出问题的机会 (3) clear函数:从内存中删除变量,增加可用内存的一种方法是周期性地把不再使用的变量从内存中清楚出去 (4) save函数:有选择地把变量保存到磁盘,使用大量数据时,这是一个有用的技巧 (5) load函数:重新载入数据文件 (6) quit函数:退出matlab并返回所有分配的内存到系统中 2) 节约内存的方法 本节介绍帮助你更节约内存,并避免出现“out of memory”的错误 (1) 使用变量 • 避免创建大型临时性变量,不再需要时清楚他们 • 使用固定大小的数
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页