サーチ…


備考

歴史

Symantec JITコンパイラはSun Java 1.1.5以降で使用できましたが、問題がありました。

Hotspot JITコンパイラはプラグインとしてSun Java 1.2.2に追加されました。 Java 1.3では、JITはデフォルトで有効になっていました。

(出典: JavaはいつJITコンパイラを入手しましたか?

概要

ここに画像の説明を入力

Just-In-Time(JIT)コンパイラは、実行時にJavaアプリケーションのパフォーマンスを向上させるJava™Runtime Environmentのコンポーネントです。

  • Javaプログラムは、さまざまなコンピュータアーキテクチャ上のJVMによって解釈されるプラットフォーム中立バイトコードを含むクラスで構成されています。
  • 実行時に、JVMはクラスファイルをロードし、個々のバイトコードのセマンティクスを決定し、適切な計算を実行します。

解釈中の追加のプロセッサーとメモリー使用量は、Javaアプリケーションがネイティブ・アプリケーションよりもゆっくりと実行されることを意味します。

JITコンパイラは、実行時にバイトコードをネイティブのマシンコードにコンパイルすることにより、Javaプログラムのパフォーマンスを向上させます。

JITコンパイラはデフォルトで有効になっており、Javaメソッドが呼び出されるとアクティブになります。 JITコンパイラは、そのメソッドのバイトコードをネイティブマシンコードにコンパイルし、実行するために"just in time"コンパイルします。

メソッドがコンパイルされると、JVMはそれを解釈するのではなく、そのメソッドのコンパイル済みコードを直接呼び出します。理論的には、コンパイルにプロセッサー時間とメモリー使用が必要ない場合は、すべてのメソッドをコンパイルするとJavaプログラムの速度がネイティブ・アプリケーションの速度に近づく可能性があります。

JITコンパイルにはプロセッサー時間とメモリー使用量が必要です。 JVMが最初に起動すると、何千ものメソッドが呼び出されます。これらのメソッドをすべてコンパイルすると、たとえプログラムが最終的に非常に優れたピーク性能を達成したとしても、起動時間に大きな影響を与える可能性があります。


  • 実際には、メソッドは最初に呼び出されたときにはコンパイルされません。メソッドごとに、JVMはメソッドが呼び出されるたびにインクリメントされるcall countを保持しcall count
  • コール・カウントがJITコンパイルのしきい値を超えるまで、JVMはメソッドを解釈します。
  • したがって、頻繁に使用されるメソッドは、JVMの起動直後にコンパイルされ、あまり使用されないメソッドは、後でコンパイルされるか、まったくコンパイルされません。
  • JITコンパイルのしきい値は、JVMの起動を早くし、パフォーマンスを向上させるのに役立ちます。
  • 起動時間と長期性能との最適なバランスを得るために、しきい値が慎重に選択されています。
  • メソッドがコンパイルされると、その呼び出しカウントはゼロにリセットされ、メソッドへのその後の呼び出しはそのカウントを増加し続けます。
  • メソッドのコール・カウントがJIT再コンパイル・スレッショルドに達すると、JITコンパイラーはそれを2回コンパイルして、前のコンパイルよりも多くの最適化を適用します。
  • このプロセスは、最大限の最適化レベルに達するまで繰り返される。

Javaプログラムの最も使用頻度の高いメソッドは、常に最も積極的に最適化され、JITコンパイラを使用することによるパフォーマンス上の利点を最大限に活用します。

JITコンパイラはoperational data at run time測定operational data at run time 、そのデータを使用して、再コンパイルの品質を向上させることもできます。

JITコンパイラを無効にすることができます。この場合、Javaプログラム全体が解釈されます。 JITコンパイルの問題を診断または回避する場合を除いて、JITコンパイラを無効にすることはお勧めしません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow