私の作業環境には、WindowsServer2008ハードウェアで実行されるエンタープライズJavaアプリケーションがいくつかあります。外部コンサルタントがJavaアプリケーションのパフォーマンスを確認しており、初期メモリ値と最大メモリ値を同じに変更することを提案しています。
そのため、現在、初期メモリが1GB、最大メモリが2GBのアプリケーションを実行しています。彼らの推奨は、初期メモリと最大メモリの両方を2GBに変更することです。
彼らの推論は2つあります...
- 初期値と最大値を2GBに割り当てることにより、Javaアプリケーションが起動すると、2GBのメモリブロックがまっすぐに取得されます。これにより、他のアプリケーションがこのメモリブロックにアクセスできなくなり、このメモリは常にJavaアプリケーションで使用できるようになります。これは、最初のブロックが1GBのみになるという現在の状況とは対照的です。つまり、他のアプリケーションがサーバー上の残りの使用可能なメモリを消費し、エンタープライズJavaアプリケーションが2GBのメモリに拡張できない可能性があります。最大。
- Javaが初期サイズと最大サイズの間にメモリを割り当てる必要があるたびに、パフォーマンスがわずかに低下します。これは、Windowsに移動し、必要なサイズの新しいブロックを割り当ててから使用する必要があるためです。このパフォーマンスの低下は、初期サイズと最大サイズの間にメモリが必要になるたびに発生します。したがって、両方を同じ値に設定すると、このパフォーマンスへの影響が排除されます。
彼らの最初のポイントは、他のアプリケーションがサーバー上で何をしているかに関係なく、Javaアプリケーションが常に最大メモリにアクセスできることを意味するため、安全性の観点から有効だと思います。ただし、これは、他のアプリケーションが必要な場合に使用できない大きなメモリブロックがあり、一般的なサーバーパフォーマンスの問題を引き起こす可能性があるため、これはマイナスの点になる可能性もあると思います。
ポイント2で説明しているパフォーマンスへの影響はおそらくごくわずかであるため、心配する価値はないと思います。パフォーマンスに関心がある場合は、メモリのブロックを割り当てることによるパフォーマンスへのわずかな影響を心配するよりも、Javaのガベージコレクションの側面などを調整する方がよいでしょう。
初期メモリと最大メモリを同じ値に割り当てるというリクエストに実際のメリットがあるかどうかを教えてください。どちらの方法でも一般的な推奨事項はありますか?