使用编辑器打开和关闭文档(Codetools.matlab.desktop.EDITOR)的内存泄漏

gcxthw6b  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(159)

在Matlab编辑器中以编程方式打开和关闭文件会导致内存泄漏。以下代码说明了该问题:

function TestEditorMemoryLeak(filepaths)
    for i = 1 : numel(filepaths)
        docobj = matlab.desktop.editor.openDocument(filepaths{i});
        disp([num2str(i), ': ', filepaths{i}]);
        pause(0.2);
        docobj.closeNoPrompt();
    end
end
  • 警告:不要运行包含大量文件的上述代码。根据在MATLAB常规设置下分配的Java堆内存大小,它可能会导致MATLAB崩溃和挂起,从而导致命令历史记录和MATLAB设置*的丢失。

我在大约1300个文件上使用了上面的代码,其中每个文件都不太大--可能平均每个文件大约有50行。在我的系统上,分配了默认的768MB Java堆内存,在大约1000个文件之后,内存耗尽,并且MATLAB严重挂起。
我认为Java垃圾收集可能会在函数运行后清除,但768MB的内存仍在使用,并且永远不会在Windows任务管理器中恢复正常。
适当增加Java堆内存设置可以解决问题,但我希望找到一个真正的解决方案。有没有办法避免这种内存泄漏?-例如,有没有办法让MatLab偶尔清理一下?会对任何有解决方案的人表示感谢。

bvuwiixz

bvuwiixz1#

这可能不是内存泄漏,已用堆和已分配堆之间是有区别的。
即使堆空间现在没有使用,JVM也可能会保留已经分配的内存。
在您的例子中,JVM进程将在打开文件期间保留内存,但不会立即将其交还给操作系统。
您可以查看此答案why does this java process not release memory

相关问题