52

Java 仮想マシン (JVM) では、Java が遅延読み込みプロセスを使用してクラスを読み込むため、ウォームアップが必要になる可能性があることを理解しています。そのため、メイン トランザクションを開始する前にオブジェクトが初期化されていることを確認する必要があります。私は C++ 開発者ですが、同様の要件に対処する必要はありませんでした。

ただし、理解できない部分は次のとおりです。

  1. コードのどの部分をウォームアップする必要がありますか?
  2. コードの一部をウォームアップしたとしても、それはどのくらいの期間ウォームアップされますか (この用語は、クラス オブジェクトがメモリ内に留まる時間を意味するだけだと仮定します)。
  3. イベントを受け取るたびに作成する必要があるオブジェクトがある場合、どのように役立ちますか?

例として、ソケットを介してメッセージを受信することが期待されるアプリケーションを考えてみましょう。トランザクションは、新規注文、注文の変更、および注文のキャンセル、または確認済みのトランザクションである可能性があります。

アプリケーションは高頻度取引 (HFT) に関するものであるため、パフォーマンスが非常に重要であることに注意してください。

4

7 に答える 7

11

ウォームアップが必要になることはめったにありませ。JIT ウォームアップ時間が結果をゆがめていないことを確認するために、パフォーマンス テストなどを行う場合に関連します。

通常の製品コードでは、ウォームアップ用のコードはめったに見られません。JIT は通常の処理中にウォームアップするため、そのためだけに追加のコードを導入するメリットはほとんどありません。最悪の場合、バグが発生し、余分な開発時間が費やされ、パフォーマンスが損なわれることさえあります。

なんらかのウォームアップが必要であることが確実にわかっている場合を除き、心配する必要はありません。あなたが説明したサンプルアプリケーションは確かにそれを必要としません。

于 2016-03-24T10:57:38.600 に答える
2

これはすべて、ランタイムでバイトコードを最適化するためにJIT使用されるコンパイラに関するものです (バイトコードのプラットフォームに依存しない性質により、高度なまたは積極的な最適化技術を使用できないため)JVMjavac

  1. メッセージを処理するコードをウォームアップできます。実際には、ほとんどの場合、特別なウォームアップ サイクルを実行する必要はありません。アプリケーションを起動して最初のメッセージのいくつかを処理するだけで、JVMコードの実行を分析して最適化を行うために最善を尽くします :) 手動偽のサンプルでウォームアップすると、さらに悪い結果が生じる可能性があります

  2. コードは、しばらくしてから最適化され、プログラム フローの何らかのイベントによってコードの状態が低下するまで最適化されます (その後、JITコンパイラはコードを再度最適化しようとします。このプロセスは決して終了しません)。

  3. 寿命の短いオブジェクトも最適化の対象ですが、一般的には、メッセージ処理のテニュア コードをより効率的にするのに役立ちます。

于 2016-03-24T10:49:51.030 に答える