2016-08-28 8 views
0

こんにちはについて混乱し、私は次のように実行する必要があります。のJava LibGDXメモリ使用量

new BitmapFont().draw("Hello World!"); 
new BitmapFont().draw("Hello Universe!"); 

または

BitmapFont font = new BitmapFont(); 
font.draw("Hello World!"); 
font.draw("Hello Universe!"); 

それはパフォーマンスのために重要ですか?

答えて

2

最初のオプションは悪化するだけでなく、オプションでもありません。メモリがリークします。これをフレームごとに行う場合、ゲームはかなり素早く電話でクラッシュします。

Disposableを実装するものは、参照を紛失するか、漏れてしまう前に必ず処分する必要があります。

ほとんどの場合、2番目のオプションは問題ありません。すべてのフレームに同じテキストを持つ数十もの文字列がある場合は、BitmapFont(someStringCache = new BitmapFontCache(bitmapFont);)から作成したBitmapFontCachesを使用して、描画するたびに文字列のグリフ配置を再計算する必要がありません。あなたのゲームのフレームレートが低すぎることがわかり、CPUに問題を絞り込んでいない限り、これは気にしません。

1

確実に2番目のオプションは、1が本当に必要なときに2つのオブジェクトを作成するため、より優れています。小規模ではこれは問題ではありませんが、すべてのJava呼び出しが最初のように行われた場合、ガベージコレクタにはより多くの時間がかかります(より多くのオブジェクト - よりGC時間が必要です)。応用。

オブジェクトがメモリにあるため、より多くのオブジェクトが必要になるほど多くのオブジェクトが必要になるため、libGDXは実用的なたびに同じバッチオブジェクトを再利用したいのです。

また、読み込みや設定が難しい(BitmapFontで何かを設定する必要がある場合は、一度行う方が良い)。

Disposableを実装するオブジェクトもチェックする必要があります。手動で処理する必要があります。 BitmapFont、バッチ、ステージ、テクスチャ

+1

はい、間違いなく2番目のオプションです。 BitmapFontの場合はGCでもなく、ネイティブドライバによって処理されます。だからあなたはあなたがそれをもう必要としないときにあなたのbitmapFontでdispose()を呼び出さなければなりません。 (または、dispose()を呼び出して、あなたが作成した新しい呼び出しごとにメモリリークを作成しないでください) –