VMware ESX などのハイパーバイザーで Java サーバーを実行すると、Java ヒープにどのような影響がありますか?
- JVM ヒープへのアクセスは、OS/ハイパーバイザーの観点からランダムです
- ゲスト OS やハイパーバイザーでは、ランダムにアクセスされるメモリを最適化することは困難です。
- この場合、ハイパーバイザーは JVM ヒープ内の未使用のページを検出できますか?
Java サーバー アプリケーションの従来の知恵では、必要に応じてヒープのサイズを動的に変更するのではなく、JVM の起動時にすべてのヒープを割り当てるとパフォーマンスが向上します。つまり、ヒープ サイズを 1GB に設定すると、Java プロセスは 1GB の連続した仮想アドレス空間 (+ バイナリに必要なもの) を取得し、他のアプリケーションでは使用できなくなります。
VMware は、このヒープの一部が実際に使用されていないことを検出できるほどスマートですか? これは GC のパフォーマンスにどのように影響しますか? VMware でヒープのサイズを動的に変更できるようにした方がよいでしょうか? VMware ゲストに最適な GC 戦略はどれですか?
また、仮想化環境で JVM ヒープを調整するためのガイドラインを教えてくれる人はいますか?