2

Java オブジェクトへの参照を含む MATLAB クラスがあります。

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

それを使用した後 (clear、scope exit を使用するか、明示的に myClass = 0; を設定)、Java オブジェクトはまだ生きています - Runtime.gc を呼び出した後でも。

オブジェクトが MATLAB プロセス (jmap -histo pID を使用) の JVM ヒープにまだあることがダンプに表示されているため、MATLAB 自体がまだオブジェクトを参照していると想定しています。 - 何も役に立たない

何か案は?

4

4 に答える 4

1

gnoviceが提案した回避策は機能しているようです-デストラクタに次の行を追加します

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

オブジェクトが MATLAB の JVM ヒープに存在しないようにしました。


参照されていない MCOS クラスで JAVA オブジェクトの参照を引き起こす MATLAB のバグのようです。

于 2009-01-10T16:25:11.253 に答える
1

MATLAB の最新のオブジェクト指向プログラミング形式は、私がまだ足を踏み入れていないものですが、いくつかのアイデアを試すことができます...

「ハンドル クラス」ではなく「値クラス」を作成していると思います (詳細については、こちらを参照してください)。値クラスのコピーが作成されると、すべての内容がコピーされます。オブジェクトの誤ったコピーがどこかに浮かんでいる場合でも、Java オブジェクトへのハンドルが存在します。

代わりにハンドル クラスからクラスを作成する場合は、クラス デストラクタ (つまり、オーバーロードされた DELETE メソッド) 内で Java オブジェクトを明示的に破棄できます。

いくつかのランダムなアイデア。彼らが役立つことを願っています。

于 2009-01-08T18:02:28.740 に答える
0

これで問題が解決するかどうかはわかりませんが、プロパティ ブロックではなく、コンストラクターで割り当てを行ってみてください。また、使用している正確な Matlab のバージョンについて言及すると役立つ場合があります。

于 2009-01-08T17:16:53.920 に答える
0

OOP の onCleanup の側面を見てみましょう。Loren が約 3 か月前にブログを書いたと思います。

HTH。ダン

于 2009-01-08T22:51:15.100 に答える