2016-04-12 11 views
2

私のゲームは、メインメニュー(25個のオブジェクト - >動的メニュー、すべて動いています)、Game Over(3個のオブジェクト)、Game Screen(15-20個のオブジェクト)、Game Shopオブジェクト)...だから私のゲームは約50MBのRAMを使用し、その後は着実に増加しました。なぜなら、私は非常に多くのオブジェクトを作成しているからです!Libgdx強制ガベージコレクタ

もちろん、私はメインメニューでSystem.gc()コマンドを使用しましたが、現在は常に約25MBであり、問​​題はないようです。しかし、人々はそれが悪い習慣であると言います。

しかし、画面が壊れてしまい、RAMを無駄にするオブジェクトを残したくないので、これが唯一の解決策であるようです。私はあなたが使い捨て実装するすべてのオブジェクトを配置していることを確認し、メモリ管理のlibgdx方法を使用することを示唆している

+0

あなたは正しくshaperenderersのようなもので、 '' 'dispose'''を呼び出していますか?そうしないと、それらに接続されたネイティブオブジェクトは決してクリーンアップされません。 –

+0

まあ、ゲームショップの私のオブジェクトのそれぞれは、スプライトと長方形のクラスを持っています...そして、それらは使い捨てのメソッドを持っていません...私の資産マネージャからロードしているテクスチャ! –

+0

作成中のすべてのオブジェクトをゲームループに再利用し、新しいオブジェクトを控えめに作成する必要があります。新しいオブジェクトを作成するたびに、メモリ内の新しい場所へのポインタを作成して(メモリをいっぱいにしています)、作成された新しいオブジェクトのほとんどはおそらくフィールド更新を2つだけ使用できます。 – MeetTitan

答えて

2

は、あなたも、あなたが一般的なパターンがあるオブジェクトプーリングを使用することができ、使い捨てのオブジェクトhereのリストを見つけることができますlibgdxウィキへ

について:libgdxで使用されるメモリ管理のための

オブジェクトプーリングは、非アクティブまたは「デッド」オブジェクトを再利用 の代わりに、新しいオブジェクトを毎回作成の原理です。これは オブジェクトプールを作成することで実現され、新しいオブジェクトが必要な場合はそのプールから を取得します。プールに空き(空き)オブジェクトがある場合は、 が返されます。プールが空の場合、または空きオブジェクトがない場合は、オブジェクトの新しいインスタンスが作成されて返されます。 がオブジェクトを必要としなくなったら、それを "無料"にします。つまり、プールに戻されます。 この方法では、オブジェクト割り当てメモリが再利用され、ガベージコレクタは となります。

Object pooling

+0

ゲーム画面のオブジェクトプーリングではありません。オブジェクトは産卵に似ており、寿命が短いですか?ここで私は画面を破壊しています...ゲームショップのオブジェクトは作成されるとスクリーンが破壊されるまで破壊されることはありません。私はそれを静的にしない限り、よく彼らはそれと一緒に行くことは良くないと言う! –

+0

明示的にsys.gcを呼び出すのではなく、あなたのゲームショップにオブジェクトプールを使用することができます。 –

+1

さて、起動したクラスでオブジェクトを作成し、プログラムを実行してオブジェクトを作成して渡します。ちょっと混乱しているようです... +それぞれのオブジェクトにテクスチャがあり、かなりの数のラムを使っています –