2013-04-06 140 views
1

當運行在Matlab下面的代碼,MATLAB的物理內存的使用增加,直到其達到90%我的系統內存,並崩潰該程序。這個代碼是更大的優化方案的一部分,將會有更多的迭代,但這裏已經簡化了。如何減少Matlab中的物理內存增加?

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文檔(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

哪裏可以找到'Tool' API文檔?或'org.parent.modeling。*'? – 2013-04-06 04:52:35

+0

https://simtk.org/api_docs/opensim/api_docs/classOpenSim_1_1RRATool.html 原始代碼是通用的。我添加了上面的實際代碼。 – hblue 2013-04-06 04:59:12

+0

您鏈接的API文檔是C++而不是Java。你爲什麼用Java標記這個? – 2013-04-06 05:07:21

回答

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的命令,我可以使用。

有沒有這種神奇的命令。你需要弄清楚內存在哪裏泄漏並修復。

+0

我感謝您的幫助。我使用Matlab通過Java包裝調用C++。我將嘗試深入挖掘並找出rraTool.run()中發生內存泄漏的原因。命令。我會看看你提供的建議。再次感謝! – hblue 2013-04-08 15:20:43

+0

這將是很好的代碼示例。我在這裏http://askubuntu.com/q/799834/25388有類似的問題,但我的矩陣是如此之大,我不相信這個建議是足夠的。 – 2016-07-17 19:19:18