2016-11-02 8 views
0

私はlibGDXを使用しており、ObjectMapPool(s)を持つクラスPoolsを使用しています。単一オブジェクトマップまたは別個の(大きいサイズ)

はそれが効果/発射のために別々のObjectMap Sを作成したり、Poolsクラス(簡単な方法)を使用することをお勧めします。

ObjectMapは遅くなりませんget(Class)メソッドが遅くなったり、パフォーマンスが低下したりしますか?

Javaのドク:

/**順不同マップ。この実装は、3 のハッシュ、ランダムウォーキング、および問題のある*キーの小さな隠しを使用したカッコウハッシュマップです。 ヌルキーは使用できません。ヌル値は許可されます。テーブルサイズを大きくする場合を除いて、割り当ては行われません。
*
*このマップ は、非常に高速なget、containsKey、removeを実行します(通常O(1)、最悪の場合 ケースO(log(n)))。 Putはハッシュに応じて少し遅くなります。 衝突。荷重係数が0.91を超えると、マップが次に高いPOTサイズに再ハッシュしなければならない機会が大幅に増えます。 * @authorネイサンスウィート*/

+1

何百万ものエントリがある場合は、少し遅くなりますが、まずメモリ不足になる可能性が高くなります。 Javaのパフォーマンスチューニングを10年以上専門にしていても、推測がほとんど間違っているため、アプリケーションのプロファイリングを行う前に、アプリケーションのパフォーマンスを低下させる可能性のあるすべてのことを考慮する必要があります。 –

+0

別にラットがあります。 – stark

+0

キーを検索するデータクラスが非常に多い場合は、時間がかかります。これは設計上の問題が深刻であることを示しています。 – Tenfour04

答えて

1

あなたはPoolsクラスにこだわったほうが良いです。私はあなたがこのクラスの仕組みを誤解していると思います。 Poolsクラスは、オブジェクトのプールをそのクラスタイプで格納するObjectMapを格納します。

たとえば、Pools.obtain(Bullet.class)を実行すると、クラスはBulletというプールを見つけてそこからオブジェクトを作成します。他のどのクラスでも同じことが起こります。つまり、実際には1つのオブジェクトマップにプールがいくつかあるだけです。

異なるデータ型のデータが数千ないし数百万ある場合を除き、このクラスを使用すると問題はありません。

関連する問題