VisualVMでJavaプログラムを監視しているときに、ガベージコレクタの動作に興味深いパターンがあることに気付きました。 '通常の'ガーベジコレクションを実行した直後に、GCは2番目に多くのCPU負荷がかかるため、追加の効果はないようです(より積極的に実行した後に使用されるヒープはそれはより軽いランの後である)。Javaガベージコレクタは、攻撃的ではない行動をした直後に積極的な実行を行うように見えるのはなぜですか?
VisualVMの出力で、ガベージコレクタの実行と対応するヒープ使用の変更がわかります。
私の質問は基本的にあり、ここで、なぜやってガベージコレクタは何ですか?十分な空きメモリがあり、軽い実行と比較して目に見える利点がない場合、実際にこれらのCPU集約型実行を試みる原因は何ですか?あるいは私はグラフを誤解していますか?
プログラムのパフォーマンスは実際には影響を受けていません。私は興味があります。
私はここで誰も "なぜ"に答えることができるだろうと思っています。見つかるにはJVMのソースコードを読んでおかなければならないでしょうし、いつでも変わるかもしれません。 –
@JimGarrison質問に答えるのに十分なだけJVMで作業しているSOユーザーがいなければならないと感じています; – bdesham