【JavaFX】アニメーションクラスの罠

2018年7月19日

先日、JavaFXでゲームを制作していると画面切り替える度にメモリリークしていっているという事実に気が付きました。

こんな感じですね。(右側にあるタスクマネージャのメモリが常に上がっていってます。画質が悪いのはごめんなさい。)

調べたところ、どうやらアニメーションは、ちゃんと停止しなければメモリリークするらしいのです。(自動で停止するアニメーションの場合は放置でも多分問題ない・・・)

このゲームでは、キャラのドット絵を無限ループアニメーションで切り替えしているのでどうやらそれがまずいみたいです。無限なのでいつまででもメモリに残り続けます。

TimelineとTranslateTransitionではメモリリークが確認できました。他のも危険かも。

ということで、面倒ですが、アニメーションをしたら必ずstopメソッドを呼び出すようにしましょう。ということが今回は言いたかっただけ。

今回のメモリリークを回避するために、私が対処した方法は、アニメーションオブジェクトを作成するときに、すべてのアニメーションオブジェクトを保持しておくクラスを作成し、画面切り替え時に全停止して削除するような実装に変更して対処しました。

対処した後の動画です。

参考にさせていただいたサイト
http://d.hatena.ne.jp/torutk/20151027/p1

JavaJavaFX

Posted by nompor