MATLAB代码显示内存不足的解决方法

总结了下大家对于运行MATLAB代码,显示内存不足的问题,在网上进行调研,总结如下:

一般out of memenry存在以下几种情况:
1、 变量需要的存储空间超过了可用的内存空间
2、 数据需要的存储空间,超过内存中最大的可用连续存储空间
3 、程序和问题求解方法的设计不周,导致内存溢出。

在MATLAB命令窗里运行 system_dependent memstats,可以看到内存的使用情况。

1. 增加虚拟内存
Windows XP,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。
Windows 7,右键“计算机”->属性->(左边栏)高级系统设置->高级->(性能)设置->高级->(虚拟内存)更改,建议物理内存的两倍左右,如果物理内存已经3G+,那就不用调整了。

2. 插根内存条

3. 换成64位的软件和操作系统

4. 采用3GB开关启动系统:

由于32位 Windows 操作系统的限制,每个进程只能使用最多 2GB 的虚拟内存地址空间,因此 Matlab的可分配内存也受到相应的限制。Matlab 7.0.1 引进了新的内存管理机制,可以利用 Windows 的 3GB 开关,使用3GB 开关启动的 Windows 每个进程可以在多分配 1 GB 的虚拟地址空间。具体做法是:修改C盘根目录 boot.ini启动选项加上 /3G,例如:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Microsoft Windows XPProfessional” /noexecute=optin /fastdetect /3G

5. 使用GPU

6. 如果有必要,不要启动java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的"…/matlab.exe") 改为("…/matlab.exe" - nojvm)

7. 关闭Matlab Server
控制面板-管理工具

8. 使用pack命令
当内存被分为很多碎片以后,其实本身可能有很大的空间,只是没有作构的连续空间即大的Block而已。如果此时Out of Memory,此时使用pack命令可以很好的解决此问题。

**9.**尽量少使用系统资源(对于Windows)
Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。

10. 对代码进行优化:

1)多数情况是你的计算中间结果太大了,简单的处理办法是把不需要的中间结果在迭代退出或者进入下一次之前clear掉。(尽量避免产生大的瞬时变量,当它们不用的时候应该及时clear)
2)将普通矩阵转换成稀疏矩阵来处理,如果矩阵中有大量的0,最好存储成稀疏形式。稀疏形式的矩阵使用内存更少,执行时间更短。
3)将矩阵进行分块处理,如果可行的话,将一个大的矩阵划分为几个小的矩阵,这样每一次使用的内存减少。
4)分布式矩阵,并行工具箱的功能。
5)为矩阵变量预制内存而不是动态分配:
在动态分配的过程中,由于开始Matlab所用的Block随着矩阵的增大而连续的为此矩阵分配内存,但是由于Block的不连续性,很有可能最开始分配的Block不能满足存储的需要,Matlab只好移动此Block以找到更大的Block来存储,这样在移动的过程中不但占用了大量的时间,而且很有可能它找不到更大的块,导致Out of Memory。而当你为矩阵变量预制内存时,Matlab会在计算开始前一次性找到最合适的Block,此时就不用为变量连续的分配内存。
6)尽量早的分配大的矩阵变量:
Matlab使用heap method管理内存。
当在Matlab heap中没有足够的内存使用时,它会向系统请求内存。
但是只要内存碎片可以存下当前的变量,Matlab会重新使用内存。
所在在大内存变量clear以后,新建的小内存变量仍可以使用那部分内存空间,但相反就不行了。比如说a变量4M,b、c、d、e分别为1M,如果a被clear以后定义bcde,则可以使用a的空间,如果clear b,c,d,e以后,假如这四个变量不是连续的,那么a就不能使用它们释放的内存。

还有很多措施,请见MathWorks社区
https://ww2.mathworks.cn/help/matlab/matlab_prog/resolving-out-of-memory-errors.html

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB 显示内存不足时,这可能是因为你的计算机内存不足以处理当前的操作或数据。这种情况下,你可以尝试以下几种方法解决问题: 1. 释放内存:关闭一些不必要的程序和进程,释放计算机上的内存资源。可以通过任务管理器或活动监视器来查看正在运行的程序和它们使用的内存。 2. 增加虚拟内存:你可以尝试增加计算机的虚拟内存大小。虚拟内存是一种计算机硬盘空间的扩展,用于暂时存储内存中无法容纳的数据。你可以在操作系统设置中调整虚拟内存大小。 3. 优化代码:检查你的 MATLAB 代码,看是否有可以优化的地方。避免使用不必要的大型矩阵或数组,使用循环而不是递归等。你可以尝试使用更高效的算法或数据结构来减小内存占用。 4. 分批处理数据:如果你处理的数据量很大,可以考虑将数据分成小批量处理,以减少内存占用。这意味着你需要将操作分成多个步骤,并逐步处理数据。 5. 使用稀疏矩阵:如果你使用的是大型矩阵,且其中大部分元素为零,可以考虑使用稀疏矩阵来节省内存。稀疏矩阵只存储非零元素,可以显著减少内存使用量。 6. 增加物理内存:如果你经常遇到内存不足问题,可以考虑增加计算机的物理内存。这意味着升级计算机的内存条。 注意:以上方法可能需要根据你的具体情况进行调整和实施。如果问题仍然存在,建议查阅 MATLAB 文档或向 MATLAB 的技术支持寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值