在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
答案 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命令。
没有这样的魔法命令。你需要找出内存泄漏的位置并修复它。