Javaのおさらい(有段者はご遠慮下さい・・)
まず、Javaはご存じの通り、ジャストインタイムコンパイラです。
C ++のような言語は、コンパイラを通じて提供されるコードは完全にバイナリであり、CPU上で直接実行可能であるため、コンパイル型言語と呼ばれます。
PHPまたはPerlは、インタープリターがコードの各行を実行時にコンパイルするため、
インタープリターと呼ばれます。
Javaはその中間にあります。コードをJavaバイトコードと呼ばれるものにコンパイルします。Javaバイトコードは、適切であると判断した場合にバイナリにコンパイルします。
Javaが起動時にコードをコンパイルしない理由は、長期的なパフォーマンスの最適化に関係しています。アプリケーションの実行を監視し、リアルタイムのメソッド呼び出しとクラスの初期化を分析することにより、Javaは頻繁に呼び出されるコードの部分をコンパイルします。
経験に基づいていくつかの仮定をすることもあります。
したがって、実際にコンパイルされたコードは非常に高速です。
しかし以下の3つの欠点があります。
メソッドを最適化してコンパイルする前に、コンパイルのしきい値に達するには、メソッドを特定の回数呼び出す必要があります(制限は構成可能ですが、通常は約10,000回の呼び出しです)。
それまでは、最適化されていないコードは「フルスピード」で実行されていません。
より迅速なコンパイルと高品質のコンパイルの間には妥協点があります。
2.Javaアプリケーションが再起動すると、振出しに戻って、そのしきい値に再び達す
るまで待つ必要があります。
3.一部のアプリケーションには、まれですが重要なメソッドがいくつかあります。
これらのメソッドは、数回しか呼び出されませんが、呼び出す場合は非常に
高速である必要があります。
この3つの欠点に対処するため、Azul Zingは、JVMに、コンパイルされたメソッドとクラスの状態をプロファイルと呼ばれるものに「保存」させることで、これらの問題に対処します。ReadyNow!®という名前のこの独自の機能は、再起動後もJavaアプリケーションが常に最適な速度で実行されていることを意味します。(以下、Zingのブログに続きます。)
原文はこちら(中段以降参照)