最初のオプションは、新しいオブジェクトを作成し、古いオブジェクトをガベージとして収集するために残します(他にライブ参照がない場合)。
GCを減らすための1つの戦略は、オブジェクトプールを維持することです。これは、現在使用されておらず、再利用できるオブジェクトのコレクションにすぎません。オブジェクトが完成したら、それをプールに返すメソッドを呼び出します。新しいオブジェクトが必要な場合は、新しいオブジェクトを作成する前にプールをチェックするメソッドを呼び出します。プールが空でない場合は、新しいオブジェクトを作成するのではなく、プールからオブジェクトを削除して再利用します。
public class SomeClass {
private static final int MAX_POOL_SIZE = . . .;
private static final ArrayList<SomeClass> pool = new ArrayList<SomeClass>();
public static SomeClass getInstance() {
int poolSize = pool.size();
if (poolSize > 0) {
return pool.remove(poolSize-1);
}
return new SomeClass();
}
public void recycle() {
// reset any fields
if (pool.size() < MAX_POOL_SIZE) {
pool.add(this);
}
}
. . .
}
新しいが必要な場合はSomeClass
、を呼び出しますSomeClass.getInstance()
。インスタンスを使い終わったら、そのrecycle()
メソッドを呼び出します。