私は最近、実際のリクエストの処理を開始する前に (高スループット要件で) アプリをウォームアップする必要があるシナリオについて学びました。この背後にあるロジックは、JIT がそのパフォーマンス マジックを実行できるようにすることでした。
これはJavaアプリの標準ですか、それともメモリが重い(フットプリント)アプリに対して一般的に行われますか?
私は最近、実際のリクエストの処理を開始する前に (高スループット要件で) アプリをウォームアップする必要があるシナリオについて学びました。この背後にあるロジックは、JIT がそのパフォーマンス マジックを実行できるようにすることでした。
これはJavaアプリの標準ですか、それともメモリが重い(フットプリント)アプリに対して一般的に行われますか?
トラフィックの多い webapp/website について話している場合、JIT は非常に小さな問題です。最大の問題は、必要なすべてのキャッシュ レイヤーを準備する (データを取り込む) ことです。たとえば、 hibernate から移入されている ehcache 領域。これは、IO 関連の操作が CPU 内で発生するものよりも桁違いに遅いためです (つまり、フラクタルを計算している場合を除きます :)
問題は、いつこれをやりたいと思うかということです。
Web アプリケーションをロールアウトし、それがすぐにライブになると、それを「ウォームアップ」している間に余分な負荷が追加され、逆効果になります。デスクトップ アプリの起動時も同様です。ユーザーがすぐに使用を開始する場合は、ウォームアップしても意味がありません。さらに悪いことに、アプリをウォームアップしている間、ユーザーが操作できないようにします。
Web アプリケーションをロールアウトし、ロード バランサーを指定する前にデプロイメントをテストすると、副次的な結果として既にウォームアップされています。
cherouvim の答えに加えて、ウォームアップが必要な他のいくつかの問題を考えることができます。
Xms
が より小さい場合Xmx
)。OS もアプリケーションの動作に合わせて調整するため、OS 呼び出しもウォームアップ期間の影響を受ける可能性があると思います。
上記のほとんど (キャッシュの作成、オブジェクトの初期化) は、Java に固有のものではありません。