4

「長時間実行」アプリケーションについて話すとき、JIT コンパイルがプリコンパイルされたものよりもコードを高速に実行する方法について多くのことを聞いてきました。しかし、アプリケーションを完全に最適化するにはどのくらいの時間がかかりますか?

念のため、例を示します。いくつかのメソッドがあります。それを と呼びましょうmySlowMethod()。回転、乗算などの行列計算を毎秒数百回実行します。各通話の時間を測定したところ、次の結果が得られました。

long time = System.nanoTime();
mySlowMethod();
System.out.println(System.nanoTime()-time);

//first call
1577187 (1.6 ms)
//next 2 seconds
~60000 (0.06 ms)
//later 
less than 10000 (0.01 ms)
4

1 に答える 1

5

JIT は実際には複数の小さなステップで動作し、アプリケーションの起動時のパフォーマンスへの影響を最小限に抑えます。これらの手順は次のとおりです。

  1. 複数のモード。

    • ベースラインJIT コンパイラは、個々のメソッドを即座に実行するために、[比較的] 単純なバイトコードからマシン コードへの直接変換を実行するために使用されます。
    • 最適化コンパイラは、何度も実行されるコードや大量の計算リソースを消費するコードに対して多くの高度な最適化を実行するために使用されます。
  2. 増分コンパイル。

    • JVM はモジュール全体のバイトコードを事前にロードしますが、実際のコンパイル プロセスは、メソッドが実際に初めて実行されるまで延期されることがよくあります。IDE などの大規模なアプリケーションの場合、アプリケーションの起動時に IDE のすべての機能が使用されているわけではないことは明らかです。多くの場合、目立たないことさえあります。

全体として、アプリケーションが「完全に最適化」されることはおそらくないでしょう。

于 2013-06-26T22:30:45.820 に答える