查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 内存无法在Matlab中释放?

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

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



回答:

有几种可能的原因。
  1. 您的脚本很可能会创建一些会填满内存的变量。跑

    clear all 重新启动脚本之前,请先清除所有变量,或将脚本更改为函数(函数返回后将自动清除所有临时变量)。请注意,这还会清除所有已加载的函数,因此您下次执行脚本时必须再次加载它们,这会使(通常很小的)位执行速度减慢。仅调用clear就足够了。
  2. 也许是通过相互绘制多个图来进行动画处理(而无需先清除轴)。因此,您可能会用完Java堆空间。您可以单独关闭未完成的数字,也可以运行

    close all 您还可以增加系统上使用Java内存Matlab的数量( 请参阅此处的说明 )-请注意,该限制通常相当低,很烦人,因此如果您要查看大量数字,就很烦人了。
  3. 特别是如果您正在运行Windows的较旧版本,则可能会导致内存碎片化。 Matlab需要连续的可用空间块来分配变量。要检查内存碎片,请运行

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

更多&回答...
poster 当前离线   回复时引用此帖