JVMパフォーマンスの最適化
**************************
プロジェクトの最適化:オペレーティングシステム、プロジェクトアーキテクチャ、プログラムコード、データベース、jvmパラメータ
オペレーティングシステムの最適化:メモリ、CPU、ストレージデバイスなど
プロジェクトアーキテクチャの最適化:アプリケーションに適したアーキテクチャを設計する
プログラムコードの最適化:一度にロードするオブジェクトが多すぎないようにする、長命の変数を持つ短期間オブジェクトを参照しない、など
データベースの最適化:プロジェクトに適したデータベースとテーブル構造を設計する
jvmの最適化:ガベージコレクターとメモリパラメーターの設定
注: jvm最適化の前に、プロジェクトアーキテクチャ、コードなどを最適化する必要があります。プロジェクトアーキテクチャまたはコード設計が不十分な場合、jvmパラメータを調整してもアプリケーションのパフォーマンスにはほとんど影響しません。
**************************
JVMチューニング評価指標:メモリ、スループット、レイテンシ
メモリ:プログラムの通常の動作に必要なメモリ
スループット:合計時間に対するアプリケーション実行時間の比率(アプリケーション実行時間+ガベージコレクション時間)
遅延:ガベージコレクション中のアプリケーションの一時停止時間
jvmチューニングの目標は、より少ないメモリでより高いスループットまたはより少ないレイテンシを達成することですが、これらの3つの目標を同時に達成することはできません。
より大きなメモリを設定すると、ガベージコレクションに時間がかかり、遅延が長くなります。
低いメモリを設定すると、ガベージコレクションが頻繁に実行され、スループットに影響します
**********************
ガベージコレクター:シングルスレッド、並列、同時、アプリケーションシナリオに応じて適切なガベージコレクターを選択する必要がある
***************
シングルスレッドガベージコレクター:シリアル(新世代)、シリアル(旧世代)
機能:ガベージコレクション中に、ユーザースレッドが機能しなくなり、ガベージコレクションスレッドが1つだけになる
アプリケーションシナリオ:数十または数百メガバイトのガベージコレクションがあり、ガベージコレクションが原因で一時停止時間が短いデスクトップアプリケーションに適しています。
関連パラメーター
-XX:+ UseSerialGC:シリアルを使用+シリアルの古いガベージコレクションの組み合わせ
***************
並列ガベージコレクター:並列スキャベンジ(新世代)、並列旧(旧世代)
機能:ガベージコレクション中にユーザースレッドが停止し、複数のガベージコレクションスレッドが存在する可能性があります
アプリケーションシナリオ:並列スキャベンジはスループット優先のガベージコレクターであり、最大休止時間とスループットを制御するパラメーターを提供します
関連パラメーター
-XX:+ UseParallelGC:並列スキャベンジ +並列古いガベージコレクターの組み合わせを使用
-XX:+ UseParallelOldGC:並列スキャベンジ +並列古いガベージコレクターの組み合わせを使用します。このパラメーターjava14は無効になり、将来削除される可能性があります
Java HotSpot(TM) 64-Bit Server VM warning: Option UseParallelOldGC was deprecated
in version 14.0 and will likely be removed in a future release.
-XX:ParallelGCThreads:同時リサイクルスレッドの数を設定します
-XX:MaxGCPauseMillis:最大休止ミリ秒。ヒープメモリが大きすぎる場合、ガベージコレクション中の休止時間が設定値を超える可能性があります。
-XX:GCTimeRatio:スループット、デフォルトは99、ガベージコレクションの時間の1%の最大使用
-XX:+ UseAdaptiveSizePolicy:若い世代のサイズ(-Xmn)、エデンとサバイバーの比率(-XX:SurvivorRatio)およびその他のパラメーターを自動的に調整します
***************
並行ガーベッジ・コレクター: G1(新世代、旧世代)
機能:ガベージコレクション中、ユーザースレッドは機能しますが、一時停止のみで、複数のガベージコレクションスレッドが存在する可能性があります
アプリケーションシナリオ:並列スキャベンジ+並列古い組み合わせと比較して、低一時停止シナリオに適しています。G1の一時停止時間はより制御可能です。
関連パラメーター
-XX:+ UseG1GC: G1ガベージコレクターを使用
**********************
メモリパラメータの設定:通常の状況では、デフォルトパラメータを使用するとパフォーマンス要件を満たすことができます
***************
共通パラメーター
-Xms:ヒープの最小値を設定します
-Xmx:ヒープの最大値を設定します
-XX:NewSize:新しい世代の最小値を設定します
-XX:MaxNewSize:新しい世代の最大値を設定します
-Xmn:新しい世代のサイズを設定します。これは、NewSizeとMaxNewSizeを同じ値に設定するのと同じです
-XX:NewRatio:新しい世代と古い世代の比率を設定します。デフォルトは2です。つまり、新しい世代:古い世代= 1:2
-XX:SurvivorRatio:エデンとサバイバーの比率を設定します。デフォルトは8、つまりエデンです:サバイバー= 8:1
***************
最適化対策
ヒープメモリのスケーリングがパフォーマンスに影響しないように、適切な初期ヒープサイズを設定するか、最大および最小ヒープサイズを同じに設定します。
古い世代のメモリサイズを調整して、完全なgcが頻繁にトリガーされるのを回避します。
若い世代のメモリのサイズを調整して、若い世代のgcが頻繁にトリガーされるのを防ぎ、古い世代に大量のオブジェクトが入るようにします。
ガベージコレクションには、並列または同時のガベージコレクタを使用します。
jdkの高バージョンの使用を検討してください。jdkの高バージョンの安定版リリースは、一般により高いパフォーマンスを持っています