[Java仮想マシンのJITコンパイラの詳細な理解] 1124JITコンパイル結果の表示と分析

I.概要

1. Java仮想マシンのジャストインタイムコンパイルプロセスは、ユーザーとプログラムに対して完全に透過的です。仮想マシンが解釈またはコンパイルによってコードを実行するかどうかは、ユーザーに影響しません(実行結果、速度に影響しません)。上記には大きな違いがあります)、ほとんどの場合、ユーザーは知る必要はありません。ただし、HotSpot仮想マシンは、ジャストインタイムコンパイルの実行ステータスを出力するためのいくつかのパラメーターと、デバッグおよびチューニングのニーズを満たすための特定の最適化手段を提供します。

2、表示

1.メソッドがコンパイルされているかどうかを知るには、パラメーター-XX:+ PrintCompilationを使用して、ジャストインタイムコンパイル中にローカルコードにコンパイルされたメソッド名を出力するように仮想マシンに要求できます。

VM option '+PrintCompilation'

2.パラメータ-XX:+ PrintInliningを追加して、仮想マシンにメソッドのインライン情報を出力するように要求することもできます。

Unrecognized option: -XX:+PrintInlining
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
 

3.さまざまなプラットフォームでの分解アダプターへのアクセス。32ビットx86プラットフォームの場合はhsdis-i386アダプターを使用し、64ビットの場合はhsdis-amd64 [図]を使用する必要があります。他のプラットフォームアダプターにはhsdis-sparc、hsdis-が含まれます。 sparcv9やhsdis-aarch64などの場合、読者は、jvm.dllまたはlibjvm.soと互換性がある限り、自分のマシンと互換性のある分解アダプターをダウンロードまたはコンパイルして、JAVA_HOME / lib / amd64 / server [図]の下に配置できます。同じパスを仮想マシンから呼び出すことができます。仮想マシンの分解アダプターをインストールした後、-XX:+ PrintAssemblyパラメーターを使用して、コンパイルメソッドのアセンブリコードを印刷するように仮想マシンに要求できます。

4. HSDISプラグインのサポートがない場合は、-XX:+ PrintOptoAssembly(サーバーモードの仮想マシンの場合)または-XX:+ PrintLIR(クライアントモードの仮想マシンの場合)を使用して、最終結果に近い中間コードを出力することもできます。リスト11-2に示すコードがコンパイルされた後、部分的な分解(-XX:+ PrintOptoAssemblyを使用)の出力結果がリスト11-5に示されることを示します。読み取るために、-XX:+ PrintOptoAssemblyパラメーターを使用して出力される疑似アセンブリ結果には、より多くの情報(主にコメント)が含まれます。これは、仮想マシンのジャストインタイムコンパイラの最適化結果を読んで理解するのに役立ちます。

おすすめ

転載: blog.csdn.net/qq_40996741/article/details/109150080