如何减少Matlab中的物理内存增加?

时间:2013-04-06 04:47:57

标签: java class matlab object memory-leaks

在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

1 个答案:

答案 0 :(得分: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命令。

没有这样的魔法命令。你需要找出内存泄漏的位置并修复它。