torutkのブログ

ソフトウェア・エンジニアのブログ

JJUG CCC 2014 Fallにちょっとだけ参加

今日は、redmine.tokyo主催のRedmine勉強会とJJUG CCCが重なってしまいました。どうしようかなと思っていましたが、JJUG CCCのセッション一覧が明らかになると、聴きたいセッションが少なく(18:00からのGCくらい)、redmine勉強会後に移動してそれを聴くというプランにしました。

http://www.java-users.jp/?page_id=1284

  • Concurrent Mark-Sweep(CMS)の基本は、まずmark(Rootから直接参照されているオブジェクトとそれから辿れるオブジェクト)、次にsweep(markされていないオブジェクトをFreeListに登録)
  • コンパクションはしない(つまり断片化が発生する)
  • HotSpot VMではヒープをNew領域、Old領域に分けてGCする世代別GCで、New領域のGCをマイナーGC、Old領域のGCをメジャーGCと呼ぶ
  • マイナーGCは、Parallel Copy GC(Stop the Worldあり、断片化しない、速い)、メジャーGCCMS(STW一部あり、断片化あり)
  • New領域でマイナーGCを必ずしもThreshold回数生き残るとOld領域へプロモートされるのではなく、それ以下でもされる(誤解していました)
  • Full GCはメジャーGCのことではない(マイナーGCも動く)
  • GCログの見方を分かりやすく解説!
    • GCログはまずGCViewer等の可視化ツールでみておかしいところをログファイルを深く調べよう
    • 詳しくは資料公開待ち
  • マイナーGCでプロモートするオブジェクトを格納するOld領域がない場合、promotion failure発生
    • 断片化が発生している可能性あり
    • 短命オブジェクトをいかにプロモートしないようにするか
    • 場合によってはCMSではなく別なGCを使うべき
    • アプリケーションを見直す
  • concurrent mode failure
    • GCの回収がオブジェクト生成に間に合わない場合
    • CPUのスレッド実行性能を上げる、並列度(コア数)を上げる
    • メモリだけを増やすのは状況をさらに悪化させる
  • GC LockerとSweepが重なるとGCがとまって大変なことに