JVM がヒープを増やす必要がある場合、より多くのメモリを予約 (malloc) します。しかし、いくらですか?
あなたは本当に気にするべきではありません。それはうまくいきます。equal Xmx
andを使用Xms
して、JVM が起動時にすべてのメモリを割り当てるようにするための多くのアドバイス。これは合理的です。さらに読んでください。
この「ステップ サイズ」はどのように設定できますか?
できません。完全に実装であり、おそらく OS に依存します。
JVM はいつ GC を開始しますか? xmx に関してではなく、予約されたヒープ サイズ (このプールのトップ) に関しては?
GC は、あなたが思っているよりも少し複雑です。若い世代がいっぱいになると、マイナー GC が実行されます。メジャー GC は、古い世代でこれ以上スペースが残っていないと呼ばれます。
そして、{{xmx}} に到達して OOM がスローされるまで、すべてが発生しますよね?
いいえ、にXmx
達すると、JVM は安定し、何も問題は発生しません。OutOfMemoryError
GC の直後に、JVM が新しいオブジェクト用の十分なスペースを見つけられない場合にスローされます (これは大幅な簡略化です)。
もしそうなら、多くの無駄な GC を防ぐために、xms を xmx の近くに設定する方がずっと良いです。
ここでも、GC の仕組みを学ぶ必要があります。Xmx
equal toを使用するXms
と、アプリケーションの実行時に不要な割り当てが回避されるため、適切な選択です (すべてが起動時に行われ、それ以上のオーバーヘッドはありません)。GCはそれとは何の関係もありません。
多くの小さなものではなく、バグごとに GC が JVM をフリーズさせるので、1 つ持っている方が良いですよね?
いいえ。マイナー GC は通常、数十ミリ秒かかり、リアルタイム システムで作業していない限り、ほとんど見えません。主要な (stop-the-world) GC には数秒かかる場合があり、エンド ユーザーにとっては確実に目立ちます。正しくチューニングされた JVM では、主要な GC はほとんど発生しません。