Fragmentation
何が問題か
過剰に頻繁にGCが呼び出される
最悪の場合、メモリがアロケートできなくなる
Fragmentationに対する対策
コンパクション
Big Bag Of Pages (BiBOP法)
ヒープを固定サイズに分割して、似たサイズのオブジェクトをまとめて配置して管理する
似たサイズごとではなくオブジェクトの型ごとに分ける方法もある
Lispとかって白本に書いてた
ヒープ領域全体を固定サイズのブロック(Big Bag)に分割し、1つのブロックには同じサイズのオブジェクトしか配置しないようにする
ここからここまでは2ワード用、ここからここまでは3ワード用というふうに
中途半端なサイズのチャンクができず、メモリの使用効率が向上する
ただし、同じサイズのオブジェクトが複数のブロック内で分散して残っていると、逆に使用効率が悪くなる