4

ガベージコレクションについて3つの質問があります

  1. アプリケーションのガベージ コレクションを調査しようとしていますが、フル GC が発生していることに気付きました。GC ログを調べると、古い世代が割り当てられたメモリの半分も使用していないことがわかりました。では、なぜ完全な GC が発生するのでしょうか。古い世代が完全に利用されていない場合でも、JVM がメモリを解放するために使用する他のアルゴリズムはありますか?

  2. 良いGCトレンドと言えるもの。つまり、完全な GC が 10 ~ 15 分ごとに発生する場合、アプリケーションを良好な状態にあると呼ぶことができます。アプリケーションにとって理想的な GC のあり方を知りたいです。アプリケーションに大きく依存することはわかっていますが、理想と呼べるものがあるはずです。

  3. NewSize または Newratio プロパティを設定していません。マシンのデフォルトの NewRatio は 2 のようです。しかし、私の若い世代はヒープ サイズの 1/4 しか使用しておらず、残りは旧世代の世代によって使用されていることがわかります。これはどのように可能ですか?私が定義したのは、Xmx と permsize だけです。
4

1 に答える 1

1

主要なコレクションはいくつかの理由で発生する可能性があります。ほとんどの場合、jstat -gccause を使用して原因を確認できます。

-System.gc() がアプリまたは他のコードから呼び出され、この呼び出しに依存している場合、その理由はほとんどありません。-古いスペース占有率に達したとき -PermGen コレクションが行われたとき -使用しているコレクタによっては、CMSIncrementalMode が古い世代の制限の前に主要なコレクションを引き起こしているようです。

System.gc() が予期しない主要なコレクションの原因である可能性が最も高いです。フラグ -XX:+DisableExcplicitGC を使用して、まだそれらを取得できるかどうかを確認してください。

--

すべての用途を説明できる傾向はありません。これは、ニーズに基づいている必要があります。現在の GC の動作は、アプリやサービスのパフォーマンスに影響しますか? ストップ・ザ・ワールドの一時停止が長くなり、スループットが低下しますか? 何を達成したいですか?そして最も重要なのは、あなたが生成しているゴミは何ですか?ヒープ ダンプを分析して、コレクターを最適化する前に、どうにかして数を減らすことができるかどうかを確認してください。

--

それは、使用している JVM のバージョン、OS などのフラグに依存します...一般的な GC エルゴノミクス、より具体的には、オプション -XX:+UseAdaptiveSizePolicy が世代のサイジングを担当します。

于 2013-10-11T06:44:08.543 に答える