オブジェクトプール
詳細情報
- 作成者
- Mark Russinovich
- 提供元
- Microsoft
- 公開年
- 種類
- 仮想デスクトップ
- 公式サイト
- learn.microsoft.com/sysinternals
あらかじめ確保したオブジェクトの集合を使い回し、生成と破棄を繰り返さないことで、確保コストとGCによる停止を避ける手法である。
ゲームでは弾、パーティクル、敵、ダメージ表示など、短命なオブジェクトが大量に生まれては消える。そのたびにヒープへ確保すると時間がかかり、メモリも断片化する。ガベージコレクションのある言語ではGCが走った瞬間にフレームが止まり、目に見えるカクつきになる。オブジェクトプールは最初にまとめて確保しておき、空いているインスタンスを貸し出し、「破棄」は単に空きの印を付け直すだけで済ませる。
このパターンはRobert Nystromの『Game Programming Patterns』に「Object Pool」として載っており、Unityのプロジェクトではほぼ必須である。代償として、プールの最大数を見積もる必要があり、再利用時の初期化を丁寧に行わなければならず、返却されなかったインスタンスは二度と戻らない。データを密に詰めてキャッシュ効率を稼ぐECSとは相性がよい。