当在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()
;步骤导致每次迭代期间内存增量增加。
我尝试过使用各种内存清除技术但没有成功
clear classes, clear java, clear rTool model, clear all
我已经通过运行内存
命令检查了碎片,但它是微不足道的。
下面是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
最佳答案
很难弄清楚你在这里实际上在做什么,更不用说为什么它会泄漏内存了。根据我的推断,您可以从 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 源代码本身中。
I was hoping that there were some general memory clearing Java commands I could use.
不存在这样的神奇命令。您需要找出内存泄漏的位置并修复它。
关于java - 如何减少Matlab中物理内存的增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847106/