内存没有在matlab中释放?

ola*_*ndo 8 memory matlab

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

??? Error: Out of memory.
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nas 8

有几个可能的原因.

  1. 很可能你的脚本会创建一些填满内存的变量.跑

    clear all
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    close all
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以增加系统上使用的Java Memory Matlab的数量(请参阅此处的说明) - 请注意,限制通常相当低,如果您想要大量的数字,那就很烦人.

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

    memory
    
    Run Code Online (Sandbox Code Playgroud)

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

  • +1.对于案例3,您不需要重新启动.碎片发生在分配给Matlab进程的虚拟内存空间中; 重新启动Matlab足以获得一个干净的平板. (3认同)