4

Matlab 2012b を使用して、データをインポートする別のプログラム (Imaris) に接続しています。通信は実際にはJavaをインターフェースとして介して行われます。私が抱えている問題は、データが Java メモリから削除されず、Matlab が最終的にクラッシュするまで時間の経過とともに積み重なることです。「Java のクリア」は機能せず、次の警告が生成されます。「Ice/ConnectionRefusedException クラスのオブジェクトが存在します - クリアしていません」

Javaメモリを実際にクリアするために私が見つけた唯一の解決策は、Matlabを再起動することですが、これは私の場合のオプションではありません。

Web を検索すると、かなりの数の人が同じ問題に遭遇していることがわかりました。( http://www.mathworks.de/matlabcentral/newsreader/view_thread/283708 )

しかし、問題を解決する方法が見つかりませんでした。誰かが解決策を知っていますか?

4

4 に答える 4

0

clear java完全な Java 仮想マシンをリセットするようです。開発者としての保護として、このアクションによって破棄される Java オブジェクトがメモリ内にある場合、Matlab はこのアクションを実行しません。

理想的には、 class のインスタンスである Matlab アイテム (通常はワークスペースまたは永続スコープ内の変数) をいつ見つけて、Ice/ConnectionRefusedExceptionそれをクリアすることができます。アクセスできる変数 (ワークスペースなど) の場合は を実行するclear variablenameか、他の関数で持続として保持されている変数の場合は を実行しますclear functionname

それから、今までと同じように、もう一度電話してみclear javaてください。

とはいえ、問題のあるオブジェクトが配置されている場所を追跡するのが難しい場合があります。フェイルセーフ再起動として Matlab を再起動することが知られています。もちろん、最近取得したデータを操作したい場合は機能しません。

于 2013-03-11T18:03:11.943 に答える
0

ガベージ コレクターを呼び出そうとすることはできますが、コレクターを呼び出さずに要求を出すため、実際に実行される保証はありません。

matlab コマンド ラインまたは m コードから実行します (コメントのおかげで修正されました)。

java.lang.System.gc()
于 2013-03-11T16:31:32.183 に答える