2009-01-08 108 views
2

我有一個包含到Java對象MATLAB爪哇引用問題

classdef MyClass 
    properties 
    j = myJavaClass 
    end 
    methods 
... 
    end 
end 

和後我使用(使用透明,範圍退出或明確設置MyClass的= 0)的基準的MATLAB類的Java對象是仍然活着 - 即使在調用Runtime.gc之後。

我在轉儲中看到對象仍在MATLAB過程的JVM堆中(使用jmap -histo pID),因此我假定MATLAB本身仍然引用該對象 - 儘管調用清除,清除JAVA,清除班級等 - 沒有任何幫助

任何想法?

回答

1

建議的解決方法gnovice似乎工作 - 增加了析構函數引發的對象不存在於MATLAB的JVM堆行

function delete(obj) 
    ... 
    jObject = 0; 
end 


它看起來像一個MATLAB中的錯誤,導致引用未引用的MCOS類中的JAVA對象。

0

我不確定這是否會解決它,但嘗試在構造函數中進行賦值,而不是在屬性塊中。此外,提及您使用的確切Matlab版本可能會有所幫助。

1

的MATLAB最新的面向對象的編程格式仍然是我沒有跳進雙腳,但我可以嘗試,並給你一些想法......

我猜你是創建一個「價值類」而不是「處理類」(您可以查看更多關於這些here)。當創建值類的副本時,將複製所有內容。如果你的某個對象有錯誤的副本,那麼仍然存在一個Java對象的句柄。

如果您要將類從類的句柄類中刪除,您可以顯式銷燬類析構函數中的Java對象(即重載的DELETE方法)。

只是一些隨機的想法。希望他們有幫助。

0

試着看看OOP的onCleanup方面。我認爲羅倫在大約3個月前寫了一篇博客。

HTH。 丹