理系学生日記

おまえはいつまで学生気分なのか

-XX:+PrintGCDetails で出力される GC ログの読み方

-XX:+PrintGCDetails を JVM に与えて起動させると、GC ログが詳細化される。
もともと、-verbose:gc を与えてると

  [GC 325407K->83000K(776768K), 0.2300771 secs]
  [GC 325816K->83372K(776768K), 0.2454258 secs]
  [Full GC 267628K->83769K(776768K), 1.8479984 secs]

ていうログになるけど、-XX:+PrintGCDetails を追加すると

[GC [DefNew: 64575K->959K(64576K), 0.0457646 secs] 196016K->133633K(261184K), 0.0459067 secs]]

ていう感じになる。
DefNew が Java ヒープの Young (New) 領域で、この例だと 64.5 MB あったオブジェクトが Scavenge GC によって 1 MB にまで減ったことを意味する。その後の 196016K からの記述は Java ヒープ全体としての変化を意味しているらしい。
Full GC だと、Tenured (Old) 領域 だったり、Permanent 領域だったりが出る。
とりあえず、この出力フォーマット、スクリプトで解析しづらい。なんとかしてほしい。