最新のものは、どうなのかわからんが、簡単にGCについて、まとめる。ヒープ領域は以下のような感じになっている。
| <--- ヒープメモリー ---> | | <--- NEW ---> | <--- OLD ---> | | <--- Eden Space ---> | <--- Survivor Space ---> | <--- Tenured Gen ---> |
ヒープメモリーは、NEW領域とOLD領域に分けることができる。NEWには、比較的新しいオブジェクトが入り、OLDには、結構、長生きしているオブジェクトが入っている。つまり、オブジェクトは、まず、NEWに入れられて、そこからOLDに移るという感じ。
っで、NEW領域をさらにEdenとSuvivorに分けることができる。基本的には、オブジェクトはEdenに入り、Scavenge GC(Full GCでないやつ。つまり、すばやく動いてくれるやつね)が走って、Suvivorに移る。そんで、NEW領域で32回、Scavenge GCを食らって生き残ったやつがOLDに移る。そんでもって、OLDがいっぱいになるとFull GCみたいな感じかね。
そんでもって、パラメータについては、
| <--- -Xms, -Xmx ---> | | <--- -XX:NewSize,-XX:MaxNewSize ---> | <--- OLD ---> | | <--- Eden Space ---> | <--- Survivor Space ---> | <--- Tenured Gen ---> | -XX:SuvivorRatio=Eden Space/Suvivor Space
と言う感じ。NEW領域のサイズは、ヒープ全体の1/4~1/3が良いみたい。ソースコードとか見たわけではないので、実際にはもっといろいろとチューニングする点はあるのかもしれないが・・・。つっこみや情報などありましたら、ぜひとも、お願いします 🙂