#Java 仮想マシンはどのようにして Java バイトコードを実行しますか?
仮想マシンの観点から見ると、Java コードを実行するには、まずコンパイルされたクラス ファイルを Java 仮想マシンにロードする必要があります。ロードされたJavaクラスはメソッド領域に格納されます。実際に仮想マシンを実行する場合、仮想マシンはメソッド領域のコードを実行します。 (推奨学習: Java コース)
実行プロセス中、Java メソッドが呼び出されるたびに、Java 仮想機会が得られます。現在のスレッドの Java メソッド スタックにスタック フレームを生成して、ローカル変数とバイトコード オペランドを格納します。このスタック フレームのサイズは事前に計算されており、Java 仮想マシンではメモリ空間にスタック フレームを継続的に分散する必要はありません。
ホットスポットでは、上記の変換プロセスには 2 つの形式があります。1 つは解釈と実行です。つまり、バイトコードを 1 つずつマシンコードに変換して実行します。 ; 2 つ目は、メソッドを実行する前にメソッドに含まれるすべてのバイトコードをマシンコードにコンパイルするジャストインタイム コンパイル (JIT) です。
前者の利点はコンパイルを待つ必要がないことですが、後者の利点は実際に高速に実行されることです。 HotSpot はデフォルトでハイブリッド モードを採用しており、解釈された実行とジャストインタイム コンパイルの利点を組み合わせています。まずバイトコードを解釈して実行し、次にメソッド単位でオンザフライで繰り返し実行されるホットスポット コードをコンパイルします。
Java 仮想マシンの効率はどの程度ですか?
ジャストインタイム コンパイルは、プログラムが 80/20 ルールに準拠している、つまりコードの 20% がコンピューティング リソースの 80% を占有しているという前提に基づいています。
大部分を占める珍しいコードについては、マシンコードへのコンパイルに時間を費やす必要はなく、解釈と実行を通じて実行しますが、一方、ほんのわずかしか占めないホットコードについては、部分的には、これをマシンコードにコンパイルして、必要な実行速度を達成できます。
理論的には、ジャストインタイムでコンパイルされた Java プログラムの実行効率は c の実行効率を超える可能性があります。これは、静的コンパイルと比較して、ジャストインタイム コンパイルではプログラムの実行時情報があり、この情報に基づいて対応する最適化を行うことができるためです。
例: 仮想メソッド呼び出しの場合、ターゲット メソッドは多数ありますが、実際の操作中に呼び出されるのはそのうちの 1 つだけです。この情報は、仮想メソッド呼び出しのオーバーヘッドを回避するために、ジャストインタイム コンパイラによって利用できます。
以上がJavaコードはどのように実行されるのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。