GCについてcactusman
自己紹介HN:cactusman(さぼてん) 年齢:0x1d 出身:関西 所属:java-ja,Wicket-ja肩書き:Hudsonコミッタ
GCについてですが
読め!
注意事項対象は初心者マニアックなことは話しません。
アジェンダGCについて基本アルゴリズムHotSpotVMのGC
GCとはプログラム上で不要となったメモリをまとめる動作メモリ領域上の不要なゴミを見つけるゴミを回収し、プログラマが再度利用できるようにする
一言で言うと
ルートゴミ
GCを学ぶ意義メモリ領域の効率的な使い方を意識枯れない技術1960~技術的に面白い(らしい)
JavaにおけるGC「Java仮想マシン」(JVM)では実装依存「Java仮想マシン仕様書 第2版」    第3章 Java仮想マシンの構造    冒頭に記述今回のJVMのGCはHotSpotについて
GCの基本アルゴリズムマーク&スイープ参照カウントコピーGCアルゴリズムはこの基本アルゴリズムの派生
マーク&スイープルート要素からたどれるオブジェクトをマークしていくマークのないオブジェクト(ゴミ)を回収する
マーク&スイープメリット実装が簡単デメリットフラグメンテーションアローケーション速度停止時間が長い
参照カウント自身のオブジェクトが参照されている数のカウンタをもっている参照される度に+1、参照が切れる度に-1されるカウンタが0になった時点で解放される
参照カウントメリット参照が切れたタイミングで解放処理が行える最大停止時間が短いポインタをたどる必要がないデメリット循環参照を回収できないカウンタの値の増減処理が重いカウンタに多くのビットが必要実装が煩雑
コピーコピー元のヒープをfrom-space、コピー先のヒープをto-spaceの二つの領域があるルートからオブジェクトをたどりながら、オブジェクトをfromからtoへコピーするコピーが終わると、from内のオブジェクトをすべて捨てる
コピーメリットスループットがいいメモリ回収と同時にコンパクションを行えるフラグメンテーションが起きないFreeList(ヒープの空き部屋リスト)を使わないため、allocate処理が早いデメリットヒープ領域が余分に取る
HotSpotVMにおける世代別GC世代別GCとは「多くのオブジェクトは若くして死ぬ」という経験則ヒープ領域を新世代、旧世代というように世代別にわけるGCを実行するとオブジェクトは歳をとるある閾値を超えるとオブジェクトは旧世代へと移動する新世代領域を頻繁にGCする
YangEdenSuvivor2Tenuredヒープ領域Suvivor1Old
GCの種類Scavenge GCコピーGCFull GCマーク&スイープGC
Scavenge GC
Scavenge GC
Scavenge GC
その他Young領域に対するパラレルGCOld領域に対するパラレルGCMostly Concurrent Mark & Sweep GC(M-CMS)ほとんどの過程を並列化G1GC(Garbage-First GC)

GCについて