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

标签 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();步骤导致每次迭代期间内存增量增加。 我尝试过使用各种内存清除技术但没有成功

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/

相关文章:

python - 在 Python 中添加到本地命名空间?

使用 Boost 函数和 C++ 类方法的 C++ 回调

c++ - Eigen 在矩阵加法中失去负号

c++ - 在 C++ 中的自定义类的构造函数中初始化没有参数的静态 const 类成员

matlab - 如何使用 MATLAB 分割文本图像?

c - 通过 MATLAB mex 从 C 获取预处理器输出

java - 为什么HttpPost会出现异常?

java - "UCanAccess: user lacks privilege or object not found"第二个连接

java - 我想使用 Java 将子元素插入 xml 树中的子元素

范围内的 Java 范围