内存没有在matlab中释放?

时间:2010-03-22 23:55:45

标签: memory matlab

我正在运行一个动画剧情的脚本(模拟水流)。过了一会儿,我通过ctrl-c来杀死循环。 多次这样做后,我得到错误:

??? Error: Out of memory.

在我开始收到该错误后,每次调用我的脚本都会生成它 现在,它发生在我调用的函数内部的任何内容之前,即使我将行a=1添加为我调用的函数的第一行,我仍然得到错误并且没有打印输出,所以函数内部的代码甚至没有被执行。 可能是什么导致了这个?

4 个答案:

答案 0 :(得分:8)

有几个可能的原因。

  1. 您的脚本很可能会创建一些填满内存的变量。运行

    clear all
    

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

  2. 也许你通过绘制几个图表(不先清除轴)来制作动画。因此,您可能会耗尽Java堆空间。您可以单独关闭未结数字,也可以运行

    close all
    

    您还可以增加系统中使用的Java Memory Matlab的数量(see instructions here) - 请注意,限制通常相当低,如果您想要大量的数字,那就很烦人。

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

    memory
    

    并查看最大可能变量大小的数字。如果这比所有阵列的可用尺寸小得多,那么是时候重新启动Matlab了(我想如果你使用需要重新启动来修复问题的Windows版本,你可能想要研究一下使用Win7的新计算机)

答案 1 :(得分:4)

clear all close all是释放记忆的直接方法,所有非初学者都知道。

主要问题是当你完成一些数据大数据处理,并清除/关闭所有内容时 - matlab仍然使用大量内存。

这是matlab目前的一个主要问题,据我所知,没有解决方案而不是重新启动matlab ,这很可惜。

答案 2 :(得分:3)

您也可以尝试pack命令,例如:

close all;
clear all;
pack;

清除记忆。虽然在最近的一次数学研讨会之后,我问了一位数学大师,他也同意了@Andrew Janke关于内存碎片的评论。通常退出并重新启动matlab会为我排序(在XP上)。

答案 3 :(得分:2)

听起来你没有清除任何变量。您应该提供一种方法来停止循环而不按ctrl-c(使用“停止”按钮和显示器编写一个简单的GUI),然后在脚本中清理工作区或在脚本开头清除变量。

您是否有意在循环的每次迭代中存储所有数据(或某些大型组件)?