4章JITコンパイラのしくみ
JIT(just-in-time)コンパイラはJVMにとって中心的な役割を果たしています。JVMのパフォーマンスに最も大きな影響を与えるのもコンパイラです。Java開発者とエンドユーザーの双方にとって、コンパイラを選択するというのは最初に行わなければならない選択の1つです。ただし、ほとんどの場合でコンパイラのチューニングは基本的なものだけで十分です。
この章では、JITコンパイラについて深く解説します。まずコンパイラのはたらきを紹介し、JITコンパイラのメリットとデメリットを明らかにします。次に、各バージョンのJavaで利用されているコンパイラを紹介します。これを踏まえて状況ごとに適切なコンパイラを利用することが、アプリケーションを高速に実行する上でとても重要です。最後に、コンパイラに関する中上級のチューニング方法を解説します。ここでのチューニングが、アプリケーションのパフォーマンスをさらに数パーセント向上させることにつながるでしょう。
4.1 JITコンパイラの概要
まずは入門的な事柄から始めたいと思います。JITコンパイルの基礎についてすでに知っているというなら、読み飛ばしてもかまいません。
コンピューター(より正確にはCPU)は、アセンブリまたはバイナリコードと呼ばれる少数の命令しか実行できません。したがって、CPU上でプログラムを実行するためにはこれらの命令へとプログラムを変換する必要があります。
C++やFortranなどはコンパイラ型言語と呼ばれます。これらの言語を使ったプログラムは、コンパイルされたバイナリコードという形で提供されます。開発者が記述したプログラムを元に、静的コンパイラがバイナリを生成します。このバイナリに含まれているアセンブリのコードは、ターゲットとするCPUの種類ごとに異なります。互換性のあるCPUでは、同じバイナリを実行できます。例えばAMDとIntelのCPUの間では、基本的なアセンブリ言語は共通です。また、新しいバージョンのCPUは以前のCPUでの命令をほぼすべて実行できます。しかし、この逆は正しくありません。新しいCPUはしばしば、古いCPUでは実行できないような命令を取り入れています。 ...
Get Javaパフォーマンス now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.