Java コードは JVM でコンパイルされて実行されますが、この実行方法にはどのような利点がありますか?
一般にマシンコードとして知られる、コンパイル後に CPU が理解できるコード形式を直接生成できる C/C 言語とは異なり、Java はコードをワードにコンパイルします。仮想マシンによって実行可能なセクション コード。 Java 仮想マシンは、さまざまなプラットフォーム (Windows、Linux、Mac など) に応じてハードウェアまたはソフトウェアによって実装できます。この利点は、Java コードがバイトコードにコンパイルされると、さまざまな仮想マシン プラットフォーム上で実行できることです。これは、私たちがよく「一度コンパイルすれば、どこでも実行できる」と呼ばれるものです。さらに、仮想マシンはホスティング環境、境界外の配列、動的タイプ、セキュリティ権限などの動的検出も提供するため、ビジネス ロジックの開発にさらに注意を払うことができます。
Java 仮想マシン
仮想マシンの観点から見ると、Java コードを実行するには、まずコンパイルされたクラス ファイルを Java 仮想マシンにロードする必要があります。ロードされたJavaクラスはメソッド領域に格納されます。 Java 仮想マシンは、ランタイム メモリ領域をメソッド領域、ヒープ、PC レジスタ、Java メソッド スタック、およびローカル メソッド スタックの 5 つの部分に分割します。
Java 実行プロセス
実行プロセス中、Java メソッドが呼び出されるたびに、Java 仮想マシンは現在のスレッドの Java メソッド スタックにスタック フレームを生成します。 . Swimsuit はローカル変数とバイトコード オペランドを保持します。このフレームのサイズは事前に計算されており、Java 仮想マシンではスタック メモリが連続している必要はありません。メソッドを終了するとき、メソッドが正常に戻るか異常に戻るかに関係なく、Java 仮想マシンは現在のフレームをポップアップして破棄します。ハードウェアの観点から見ると、Java バイトコードは直接実行できないため、Java 仮想マシンはバイトコードを CPU が認識できるマシンコードに変換する必要があります。
上記の変換プロセスには 2 つの状況があります。1 つ目は解釈と実行、つまりバイトコードを 1 つずつマシンコードに変換して実行することです。2 つ目はジャストインタイム コンパイル (JIT) です。メソッド内のすべてのバイトコードは、実行前にマシンコードに変換されます。
前者の利点は、コンパイルを待つ必要がないことです。後者の利点は、実際に高速に実行されることです。より高速な実行速度を実現するために、Java 仮想マシンは通常、両方の利点を組み合わせた混合モードという 2 つの方法を採用します。ジャストインタイム コンパイル テクノロジは、80-20 ルールの理論に基づいています。つまり、コードの 20% がコンピューティング リソースの 80% を占有します。ほとんどの一般的ではないコードには解釈が使用され、少数の一般的に使用されるコードにはジャストインタイム コンパイルが使用され、妥当な実行速度が実現されます。
コンピューティング リソースが十分な場合は、バイトコードの解釈、実行、即時コンパイル、および同時実行が可能です。コンパイルが完了すると、次回は解釈の実行を置き換えて、マシンコードを直接実行できます。一般に、Java コードの実行効率は仮想マシンの構成と動作モードに大きく関係しており、Java 仮想マシンを最適化することでコードの実行効率を効果的に向上させることができます。
以上がJava をコンパイルして実行する利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。