声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1699|回复: 0

[编程技巧] 【转】关于Matlab内存溢出问题的处理方法

[复制链接]
发表于 2016-3-14 15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
该文章讲述了关于Matlab内存溢出问题的处理方法.

error:
Out of memory. Type HELP MEMORY for your options.
今天程序运行,出现这样一个以前从未碰到过的错误。百度之,原来是MATLAB内存溢出了呀!就像吃太多了会呕吐一样。
out of Memory问题处理方法一般如下:
由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成“Out of Memory”。
1。为矩阵变量预制内存而不是动态分配
    在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。
比较下面两个程序:
(1)for k = 2:1000
            x(k) = x(k-1) + 5;
        end
(2)x = zeros(1, 1000);
        for k = 2:1000
            x(k) = x(k-1) + 5;
        end
显然,第二个更好!!!最好的方法是,在程序一开始就位所有大的矩阵变量预制存存储单元!!!
2。尽量早的分配大的矩阵变量
    Matlab使用heap method管理内存。当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。所在在大内存变量clear以后,新建的小内存变量仍可以使用那部分内存空间,但相反就不行了。比如说a变量4M,b、c、d、e分别为1M,如果a被clear以后定义bcde,则可以使用a的空间,如果clear b,c,d,e以后,假如这四个变量不是连续的,那么a就不能使用它们释放的内存。
3。尽量避免产生大的瞬时变量,当它们不用的时候应该及时clear
4。将矩阵转化成稀疏形式
    如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。
5。使用pack命令
    当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。
6。如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。
7。增大虚拟内存
Windows XP,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。
8。尽量少使用系统资源(对于Windows)
Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。
9。如果没有必要,不要启动java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的 "..../matlab.exe") 改为("...../matlab.exe" - nojvm)
10。关闭Matlab Server
11 。用clear清空变量
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/largestone_ ... /11/24/6031394.aspx
转自:http://blog.sina.com.cn/s/blog_61c41eb80101992d.html
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 08:18 , Processed in 0.060984 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表