JavaFX(8)3Dアプリケーションを構築しました。これは、一部のファイルからデータを読み取り、それを一部のシーンでレンダリングします。オブジェクトをレンダリングするためのJavaFX-3Dを使用してアニメーションを作成するときにメモリリークが発生する
は、私が使用します。
graphicsContainer.getChildren().add(some3dObject);
私はこの行をコメントアウトすると、レンダリングを無効にするため、私はまったくメモリリークを持っていません。
しかし、この行が実行されると、アプリケーションはますます多くのメモリを消費します。私は毎秒30フレームを持っており、毎秒メモリ消費量は〜50MBに増加します。
これは私が使用するフレーム間が、勿論である。
graphicsContainer.getChildren().clear();
IはgraphicsContainer
に割り当てる3Dオブジェクトは、ローカルの任意の静的/グローバルスコープに保存されません。それらはgraphicsContainer
の子としてのみ保存され、すべてのフレームで消去されます。
graphicsContainer
の子どもを毎回削除しても、JavaFX-3Dエンジンの何かが私の仕事を本当にクリアしてくれないようです。
JavaFX 3Dエンジンが過去の3Dオブジェクトとレンダリングをどのようにしてリリースするか考えてみましょうか?
メモリリークの実際の証拠は何ですか?それは最終的に完全にメモリ不足ですか?ガベージコレクタが未使用のメモリ(まだ)を回収する必要があると判断していないことをどのように知っていますか? –
Linuxでこれを実行していますか? JavaFXはいくつかの設定でLinux上でいくつかのメモリリークの問題を抱えています(技術的に漏れはJavaではなくMesaにありますが、JavaFXが唯一の場所です) – Itai
Windows上にあります – SomethingSomething