1

在 Matlab 中运行以下代码时,Matlab 的物理内存使用量会增加,直到达到我系统内存的 90%,并导致程序崩溃。这段代码是一个更大的优化方案的一部分,将有更多的迭代,但这里已经简化了。

import org.parent.modeling.*

for i = 1:100
    rTool = Tool('C:/etc');
    model = rTool.getModel();
    model.initSystem();
    rTool.setModel(model);
    rTool.run();
end

rTool和模型作为 Java 对象存储在工作区中。通过有选择地从底部到顶部删除步骤,我确定rTool.run(); step 导致每次迭代期间内存增加。我尝试过使用各种内存清除技术但没有成功

clear classes, clear java, clear rTool model, clear all 

我已经通过运行命令检查了碎片memory,但它是微不足道的。下面是对应于 API 文档的实际代码 ( https://simtk.org/api_docs/opensim/api_docs/classOpenSim_1_1RRATool.html )

for i = 1:1:4

    import org.opensim.modeling.*

    rraTool = RRATool('C:\...filename.xml');
    model = rraTool.getModel();
    model.initSystem();

    rraTool.setModel(model);
    rraTool.run();

end

有什么减少物理内存增加的建议吗?

MATLAB:2013

4

1 回答 1

1

很难弄清楚你到底在做什么,更不用说它为什么会泄漏内存了。根据我的推断,您可以从 MatLab 调用 Java,也可以直接从 Matlab 调用 C++。我不知道您是直接调用 C++ 库,还是通过 Java (JNI / JNA) 包装器调用它。如果你正在做后者......为什么。

对于 Matlab -> C++ 案例,此页面有一些避免内存泄漏的提示:http: //www.mathworks.com.au/help/matlab/matlab_external/memory-management-issues.html

对于 Matlab -> Java -> C++ 情况,泄漏可能是由于 Java 包装器或其关联的 C++ 端包装器代码中的错误,或者您使用包装器的方式存在问题。例如,dispose您可能需要调用某些方法。详细信息应在 Java API 文档中……您无法找到……或在 Java 源代码本身中。


我希望有一些我可以使用的通用内存清除 Java 命令。

没有这样的神奇命令。您需要找出内存泄漏的位置并修复它。

于 2013-04-06T23:32:25.313 回答