JVM (Java Virtual Machine) さまざまな方法 (ソフトウェアまたはハードウェア) で実装できるコンピューティング デバイスの仕様。次に、この記事を通じて Java JVM 仮想マシンの動作メカニズムについて簡単に説明しますので、興味のある方はぜひ一緒にご覧ください
1: JVM の基本概念
JVM (Java Virtual Machine)はコンピューティング デバイスの仕様であり、さまざまな方法 (ソフトウェアまたはハードウェア) で実装できます。仮想マシンの命令セットのコンパイルは、マイクロプロセッサの命令セットのコンパイルと非常に似ています。 Java 仮想マシンには、バイトコード命令のセット、レジスターのセット、スタック、ガベージ コレクション ヒープ、およびストレージ メソッド フィールドが含まれます。
Java 仮想マシン (JVM) は、Java コードを実行できる架空のコンピューターです。インタプリタが JVM 仕様に従って特定のコンピュータに移植されている限り、コンパイルされた Java コードはすべてそのシステム上で実行されることが保証されます。
Jvm のアーキテクチャ図を見てみましょう:
2: インタプリタ言語とコンパイル言語の関係と違い。
コンパイル言語はコンパイラを使用してプログラムをターゲットマシンが認識できるマシンコードにコンパイルしますが、インタープリタ言語はコンパイルプロセスを必要としません。言語のインタプリタはスクリプトを読み取り、文法に従って解釈します。ルールを指定してから、インタープリターの組み込みコマンド (またはライブラリ関数) を呼び出します。たとえば、C言語のprintf()関数が静的にコンパイルされた後、printf()に必要なすべてのコードがマシンコードの形式で実行可能ファイルに書き込まれ、シェルがプログラムを実行するときに検索が行われます。指定されたパスに ファイル、そしてローダー(Loader)がプログラムのELFファイルをメモリにロードし、プログラムエントリにジャンプし、プログラムに制御を渡します。
動的コンパイルの状況は少し異なります。 printf() は非常に一般的に使用される関数であるため、システムは、よく使用される関数 をライブラリに収集します。Myprintf() 関数を作成するときに printf() を呼び出すと、動的コンパイル後に形成される ELF ファイルには printf() が含まれません。関連コードですが、「プログラムは printf() を呼び出すので、printf() のアドレスが必要です」というシステムに伝える情報がいくつかあります。 ELF ファイルをロードした後、まずダイナミック リンカー (ldd) を実行します。ldd はプログラムが依存するダイナミック ライブラリを認識し、ダイナミック ライブラリがシステムにロードされていない場合は、ライブラリをロードしてエントリをバインドするようにシステムに通知します。必要に応じてライブラリ関数のアドレスをプログラムに追加し、プログラムのエントリ アドレスにジャンプしてプログラムの実行を開始します。ここで、私たちが書いたプログラムはコンパイルされると、特定のマシンのマシンコードといくつかの付随情報 (シンボルテーブル、アドレス、変数値など) になり、システムロードを通じて「動的プログラム」になります。そして実行機構——プロセス。
インタープリター言語の実行プロセスは、インタープリター、python、perl、rubyなどから切り離せません。したがって、スクリプトの最初の行は通常 #/usr/bin/××× になります。 ×××は各言語の対応するインタプリタを表します。スクリプトは通常、式(式)と式のブロックで構成されます。インタプリタが最初に行う必要があるのは、式の構造を分析して理解して「実行シーケンス」を形成することです。この「実行シーケンス」は中立的でネイティブマシンを対象としないため、「移植性」が高いです。ここで「実行シーケンス」の代わりに「バイトコード」を使用していないのは、jvm にはバイトコードの概念があり、両者には大きな違いがあるためです。実行順序の決定はインタプリタの最も重要な役割です。 Python による関数出力が python_print() であると仮定すると、Python インタプリタはスクリプトを「解釈」するときにこの式に遭遇すると、システムの print() 関数を呼び出して出力操作を実行します。このスクリプトは、Python インタープリターに実行方法を指示するための高レベルの 設定ファイル として理解することもできます。
3: Java 実行プロセス
Java プログラムの JVM 実行は、すでにマシンと呼ばれているため、上記の 2 つよりも複雑です。以下の図は、JVM の構造ブロック図です。主にガベージ コレクター、クラス ローディング サブシステム、実行エンジン、ランタイム データ領域などが含まれます。以上がJava JVM仮想マシン動作機構の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。