• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java -verbose:gcの見方について)

Java -verbose:gcの見方と解説

このQ&Aのポイント
  • Java -verbose:gcを使用して実行した結果、[GC]と[Full GC]のログが表示されます。
  • [GC X->Y(Z), T secs]という形式のログは、メモリの使用量の変化を示しています。
  • また、[GC X->Y(Z), T secs]のX, Y, Zはそれぞれ、GC前のメモリ使用量、GC後のメモリ使用量、ヒープの最大サイズを表しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • KaZtoYou
  • ベストアンサー率73% (11/15)
回答No.2

FullGCはJavaVMが確保しているメモリ空間全てに対して 開放できるメモリがないか調査します。 一般的に処理時間が多くかかる傾向にあります。 それに対しGCは一部分(世代管理されていれば新世代だけといったもの) に対してメモリチェックを行います。 細かいことは各種JavaVMでのGCの実装によって違うので はっきりとはいえません。 ちなみにFullGCはSystem.gc()を使って意図的に発生させることができます。 メモリ変化がない場合は文字通りGCを行っても メモリを開放できる部分が無かったことを表します。 既にメモリ開放された状態で意図的にSystem.gc()を使い FullGCを発生させてもメモリ変化がないケースがあるといえます。 質問の例では、なぜそのような現象が起こるかは 別途調査が必要かもしれませんが、ただ単にJavaVMの GCアルゴリズムが良くないのかもしれません。

chi-kon
質問者

お礼

なるほど。。。 わかりました! ありがとうございました。 >各種JavaVMでのGCの実装によって違うので はっきりとはいえません。 これってJavaの質問の際によくでてくるフレーズですね。 キーワードですね!

その他の回答 (1)

  • KaZtoYou
  • ベストアンサー率73% (11/15)
回答No.1

>[GC 511K->372K(960K), 0.0297021 secs] これを例にとると 1.GCが行われた 2.メモリ使用量511Kbytes 3.GC後メモリ使用量372Kbytes 4.javaVMが確保しているメモリ空間は960Kbytes 5.GCにかかった時間は0.0297021秒 補足 Runtimeクラスのメソッドで同様の情報が取得できます。

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/lang/Runtime.html
chi-kon
質問者

お礼

ご回答ありがとうございます。 あとFullGCと普通のGCの違いはどう違うのでしょうか? [Full GC 829K->829K(1344K), 0.0650338 secs] [GC 1277K->1237K(1852K), 0.0499598 secs] の部分ではGC後使用メモリに変化がないのですが、 これはどういうことでしょうか?

関連するQ&A