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

Java 如何减少Matlab中物理内存的增加?,java,class,matlab,object,memory-leaks,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);

在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 
我已经通过运行
memory
命令检查了碎片,但这并不重要。 下面是与API文档()对应的实际代码

有没有减少物理内存增加的建议


Matlab:2013

很难弄清楚您在这里实际在做什么,更不用说它为什么会泄漏内存了。从我已经推导出的,你可以调用MATLAB的java,你可以直接调用MATLAB的C++。我无法确定您是否直接调用C++库,或者通过java(JNI/JNA)包装器调用它。如果你在做后者。。。为什么

对于Matlab -C++案例,此页有一些避免内存泄漏的提示:

<> >对于Matlab -java(java)C++ C++,泄漏可能是由于Java包装器或相关的C++侧包装代码中的错误,或者是使用包装器的方式造成的问题。例如,可能需要调用一些
dispose
方法。详细信息应在Java API文档中。。。您无法找到的。。。或者在Java源代码本身中


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


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

很难弄清楚您在这里到底在做什么,更不用说它为什么会泄漏内存了。从我已经推导出的,你可以调用MATLAB的java,你可以直接调用MATLAB的C++。我无法确定您是否直接调用C++库,或者通过java(JNI/JNA)包装器调用它。如果你在做后者。。。为什么

对于Matlab -C++案例,此页有一些避免内存泄漏的提示:

<> >对于Matlab -java(java)C++ C++,泄漏可能是由于Java包装器或相关的C++侧包装代码中的错误,或者是使用包装器的方式造成的问题。例如,可能需要调用一些
dispose
方法。详细信息应在Java API文档中。。。您无法找到的。。。或者在Java源代码本身中


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


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

工具的API文档在哪里?或者
org.parent.modeling.*
?原始代码是通用的。我添加了上面的实际代码。链接到的API文档是C++而不是java。你为什么用Java来标记这个?我是新手。它们是MATLAB中的java对象。那么为什么你要发送C++的API文档呢?没有Java文档吗?问题是java和C++有不同的方式来进行内存管理。如果你不从java文档中工作,你就有可能做一些导致C++内存泄漏的事情(假设你通过java调用C++本地库),在哪里有代码< >代码>工具<代码>?或者
org.parent.modeling.*
?原始代码是通用的。我添加了上面的实际代码。链接到的API文档是C++而不是java。你为什么用Java来标记这个?我是新手。它们是MATLAB中的java对象。那么为什么你要发送C++的API文档呢?没有Java文档吗?问题是java和C++有不同的方式来进行内存管理。如果你不从java文档中工作,你就有可能做一些导致C++内存泄漏的事情(假设你通过java调用C++本地库),我很感激你的帮助。我用java包装器调用C++。我将尝试深入研究,找出rraTool.run()中发生内存泄漏的原因;指挥部。我来看看你提供的建议。再次感谢!在这里获得代码示例将非常好。我在这里有一个类似的问题,但我的矩阵太大,我不相信这个建议是足够的。我感谢你的帮助。我用java包装器调用C++。我将尝试深入研究,找出rraTool.run()中发生内存泄漏的原因;指挥部。我来看看你提供的建议。再次感谢!在这里获得代码示例将非常好。我这里有一个类似的问题,但我的矩阵太大了,我不相信这个建议是足够的。
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