Matlab使用过程中内存不足问题的总结(修改)
转载自:http://blog.csdn.net/xiaojidan2011/article/details/8089532
20170306修改:
因为重装系统,装了R2016a版本,增加了一个4G的金士顿内存条(总内存8G),使用了一个多月了,没有发现内存不足的问题。
警告并不是说真的物理内存用完了,一般out of memenry存在以下几种情况:
1、 变量需要的存储空间超过了可用的内存空间
2、 数据需要的存储空间,超过内存中最大的可用连续存储空间
3 、程序和问题求解方法的设计不周,导致内存溢出
个人认为,第一种出现情况最少,第二种出现情况应该是大众情况,第三种那我只能说你是个不太地道、不够细心的程序员,至少分配大点的地方给变量么!!下面就简单说下处理和应对方法:
由于在使用的过程中,由于存储单元的不断的被分配和清除,内存会被分割成不连续的区域,这是很容易造成“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,右键“我的电脑”->属性->高级->性能->设置,从而改变其虚拟内存。
Windows 7,右键“计算机”->属性->(左边栏)高级系统设置->高级->(性能)设置->高级->(虚拟内存)更改,建议物理内存的两倍左右,如果物理内存已经3G+,那就不用调整了。
8、尽量少使用系统资源(对于Windows)
Windows中字体、窗口等都是要占用系统资源的,所以在Matlab运行时尽量不要打开不用的窗口。
9、如果没有必要,不要启动Java虚拟机,采用matlab -nojvm启动 (在快捷方式属性里面的 "..../matlab.exe") 改为("...../matlab.exe" - nojvm)
10、关闭Matlab Server
Matlab使用过程中内存不足问题的总结(修改)相关推荐
- matlab运行过程中出现找不到指定模块问题解决
matlab运行过程中出现找不到指定模块问题解决 参考文章: (1)matlab运行过程中出现找不到指定模块问题解决 (2)https://www.cnblogs.com/dyllove98/p/32 ...
- MSComm控件过程中内存溢出和GetOneDimSize出错的问题
MSComm控件过程中内存溢出和GetOneDimSize出错的问题 现在做的一个项目需要实现上位机和单片机的串口通信,为了方便,使用了MSComm控 件,但写程序时在处理接收数据遇到了问题,程序可以 ...
- matlab换挡程序,一种基于MATLAB换挡过程中快速锁定分析数据的方法与流程
本发明涉及汽车变速器数据分析,特别的,涉及一种基于matlab换挡过程中快速锁定分析数据的方法. 背景技术: 自动变速器的核心功能是能根据驾驶员意图进行自动换挡,解放驾驶员的左脚:在自动变速器的使用过 ...
- mysql内存淘汰_从创建索引过程中内存变化来看SQL Server与MySQL的内存淘汰算法
在sqlserver中,几年之前就注意到一个现象:sqlserver中对一个大表创建索引或者rebuild索引的过程中,会引起内存剧烈的动荡,究其原因为何,这种现象到底正不正常,是不是sqlserve ...
- 解决使用MSComm控件过程中内存溢出的问题
现在做的一个项目需要实现上位机和单片机的串口通信,为了方便,使用了MSComm控件,但写程序时在处理接收数据遇到了问题,程序可以编译通过,但运行的过程中,程序只要接收到串口发来的数据,就会弹出内存溢出 ...
- 在计算机使用过程中内存出现,电脑在使用过程中提示电脑内存不足怎么办?
在使用电脑的过程中可能会出现系统死机或蓝屏现象.导致电脑系统死机的因素有很多,其中电脑内存问题导致系统死机就是比较常见的.如果在使用过程中发现电脑提示内存不足怎么办?小编给大家分享一篇电脑内存不足的解 ...
- 内存管理——程序运行过程中内存的作用以及如何与cpu、os交互
今年以来,内存条价格暴涨,已经跃升为新的新一代理财产品,所以今天就和大家讨论一下内存条的话题,主要内容就是在程序运行过程中,内存的作用以及如何与CPU,OS交互. 我们先来讨论:计算机的运行究竟是在做 ...
- Microsoft Visio Premium 2010安装过程中遇到错误1402所需修改的注册表项
2019独角兽企业重金招聘Python工程师标准>>> 昨天为了画一个数据库的模型图,装了下Visio,结果安装的时候一直报1402的错误,而且每次安装时候遇到这个错误,都需要回滚重 ...
- jmeter压测过程中内存溢出
转载自:https://www.cnblogs.com/imyalost/p/7901064.html 老_张 jmeter是一个java开发的开源性能测试工具,在性能测试中可支持模拟并发压测,但有 ...
最新文章
- kubelet配置cni插件_从零开始入门 K8s | 理解 CNI 和 CNI 插件
- android组件通讯 Intent-Action属性
- xman的思维导图快捷键_这个良心好用的思维导图软件,居然不用氪金充钱
- Int与String之间相互转换
- LeetCode 21. 合并两个有序链表 golang
- 遍历聚合对象中的元素——迭代器模式(四)
- OpenCV学习(13) 细化算法(1)(转)
- Nodejs学习笔记(十二)--- 定时任务(node-schedule)
- Zemax学习笔记——Zemax序列坐标系理解及坐标断点
- Edge 浏览器的收藏夹文档位置——最新版windows10和edge
- 如何使用Python3解二维码和编译二维码
- hive分隔符_Hive表字段、行、map默认分隔符
- 谷歌母公司一季度营收363亿美元 计提欧盟罚款后净利润仍超过66亿美元
- Java笨狗groovy学习笔记—Regular Expressions
- Greenplum6.x搭建_安装
- PPT学习资源和实用技巧
- 海量数据——TopK问题
- Windows server 2012R2下流媒体服务器的配置与管理
- pdfboxiText生成PDF文件格式及读取PDF文件内容的小示例--完美支持中文版
- 计算机图形学考试复习
热门文章
- bean validation校验方法参数_Springboot 使用校验框架validation校验
- Python中selenium的玩法,小朋友看了都说学会了
- python学什么东西_什么是Python?你应该学习和使用它的13个理由
- Java存储任意对象_浅析java设计模式(一)----异构容器,可以存储任何对象类型为其他类提供该对象...
- java apache.poi_Java利用apache的POI操作Excel
- mysql数据库腾讯云添加用户,解决腾讯云cdb的基础版mysql不支持新建账号
- 大端模式、小端模式、网络字节顺序与主机字节顺序
- iozone测试文件系统
- MySQL的sql优化
- 微信小程序连接本地接口(转)