登录论坛

查看完整版本 : 内存无法在Matlab中释放?


poster
2019-12-10, 20:30
我正在运行一个对绘图进行动画处理的脚本(模拟水流)。一段时间后,我通过执行ctrl-c杀死了循环。经过几次此操作后,我得到了错误:

??? Error: Out of memory. 在我开始收到该错误之后,每次调用脚本都会生成该错误。
现在,它发生在我要调用的函数内部的任何内容执行之前,即即使我将a=1行添加为要调用的函数的第一行,我仍然会收到错误并且没有打印输出,因此其中的代码该功能甚至不会执行。是什么原因造成的?



回答:

有几种可能的原因。


您的脚本很可能会创建一些会填满内存的变量。跑

clear all 重新启动脚本之前,请先清除所有变量,或将脚本更改为函数(函数返回后将自动清除所有临时变量)。请注意,这还会清除所有已加载的函数,因此您下次执行脚本时必须再次加载它们,这会使(通常很小的)位执行速度减慢。仅调用clear就足够了。

也许是通过相互绘制多个图来进行动画处理(而无需先清除轴)。因此,您可能会用完Java堆空间。您可以单独关闭未完成的数字,也可以运行

close all 您还可以增加系统上使用Java内存Matlab的数量( 请参阅此处的说明 (http://www.mathworks.com/support/solutions/en/data/1-18I2C/index.html) )-请注意,该限制通常相当低,很烦人,因此如果您要查看大量数字,就很烦人了。

特别是如果您正在运行Windows的较旧版本,则可能会导致内存碎片化。 Matlab需要连续的可用空间块来分配变量。要检查内存碎片,请运行

memory 并查看该数字以获取最大可能的变量大小。如果它远小于所有阵列可用的大小,那么该重新启动Matlab了(我猜如果您使用的Windows版本需要重新启动才能解决此问题,您可能需要考虑购买使用Win7的新计算机) 。



更多&回答... (https://stackoverflow.com/questions/2496594)