パフォーマンスチューニングに関するいくつかのメモを読んでいるときに、メモリサイズを設定する際の推奨事項に気づきました。
永続生成スペースを拡大または縮小するには完全なGCが必要であるため、Javaアプリケーションは、永続生成の初期サイズと最大サイズの両方を同じ値にサイズ設定する必要があります。ヒープサイズ、つまりを設定するときにも同様の提案があります-Xmx=-Xms
。
私の質問は、なぜ-Xms設定があるのですか?
また、 -Xmxと-Xmsの値が異なる場合に、GCが頻繁にトリガーされるのはなぜですか。また、-Xmxと-Xmsのサイズが同じ場合はトリガーされません。
2番目の質問にさらに追加すると、最小ヒープサイズが64M、最大ヒープサイズが512 Mの場合、アプリで使用されるメモリが512Mに達しない限り、完全なGCはトリガーされないと思います。
同様に、-Xmxと-Xmsの両方で512Mから開始した場合でも、アプリのメモリ使用量がこの制限に達すると、JVMは完全なGCをトリガーします。では、なぜmaxとminの両方を同じ値に設定することが推奨されるのでしょうか。