JVM仮想マシンの操作機構

JVM仮想マシンの操作機構

JVMとは何ですか?
仮想マシンは、物理マシンのソフトウェア実装です。Javaが開発しWORAを実行しているVM(どこでも実行すると書く)という概念に使用されています。JavaファイルのためのJavaコンパイラが.classファイルにコンパイルして、JVMへの.classファイルを入力され、JVMは、クラスファイルをロードして実行します。


JVMの基本的な考え方


(1)基本的な考え方:
JVMは、仮想コンピュータ実行可能なJavaコードは、バイトコード命令セット、レジスタのセット、スタック、ガベージコレクション、およびドメインのためのヒープ記憶方法を含みます。JVMは、オペレーティングシステム上で実行され、それがハードウェアと直接相互作用を持っていません。
(2)実行中のプロセスを:
我々は、すべてのバイトコードファイルで適切に.Classファイル、バイトコードファイルとJava仮想マシンインタプリタを生成することができるコンパイラによってそのJavaソースファイルを、知っている、特定にコンパイルマシンのマシンコード。
次のようである
①Javaソースファイルは- >コンパイラ- >バイトコードファイル
②バイトコードファイル- > JVMは、 - >マシンコード
各プラットフォームの通訳のために異なっているが、仮想マシンの実装がありますJavaプラットフォームは、仮想マシンがインスタンス化される開始、その後、交差、およびプログラム実行中からできる理由である、と同じ、複数のプログラムは、複数の仮想マシンインスタンスを起動します。またはデータが共有できない仮想マシンの複数のインスタンス間で、仮想マシン・インスタンスが死ぬ、プログラムが終了を閉じます。
(3)3つのJVM:
JDK1.7以前では、我々が使用している日のHotSpotが、SunやBEAシステムズは、Oracleが買収されている、Jdk1.8は、SunのHotSpotとBEAのを使用します。 2つのJRockit JVMのjdk1.8は、JVMの本質を形成しました。
どのようにJVMの作品?
上記の図のアーキテクチャに示されるように、JVMは、三つの主要なサブシステムに分割されています。
クラスローダサブシステム
のJava動的クラスローディングサブシステムは機能クラスローダによって処理されます。それが実行されている、そして、コンパイル、リンク、および初期クラスファイルときに、クラスへの最初の参照がロードされていない場合。
1.ロード
このコンポーネントによってロードされたクラス。ブートストラップクラスローダ、拡張クラスローダとアプリケーションクラスローダは、3クラスローダに貢献しています。
上記のクラス委任階層アルゴリズムは、ロード・クラス・ファイルを次の。
2.リンク
3.初期化する
このクラスは、すべての静的変数が元の値を与えられ、そして静的ブロックを実行するローディングの最終段階です。
第二に、ランタイムデータ領域
、データ領域は、5つの主要な構成要素に分割されて実行:
(1)メソッドarea -すべてのクラスレベルのデータがここに格納され、静的変数を含みます。各JVMは、一方向のみの領域であり、それは共有リソースです。
(2)ヒープ領域-すべてのインスタンス変数と配列と対応するオブジェクトがここに格納されます。各々はまた、JVMのヒープ領域を有しています。複数のスレッドで共有方法とヒープメモリ領域ので、データが非スレッドセーフに格納されているように。
(3)スタック領域-スレッドごとに別々の実行時スタックを作成します。各メソッド呼び出しのスタックフレームと呼ばれるスタックメモリ内のエントリを生成します。すべてのローカル変数は、スタックメモリ内に作成されます。それは共有リソースではありませんので、スタック領域は、スレッドセーフです。スタックフレームは、3つのサブ要素に分割される:
(4)PCレジスタ-各スレッドが別のPCレジスタを有し、現在実行中の命令のアドレスを格納するための、命令実行時、PCレジスタは次の命令に更新されます。
(5)ネイティブメソッドスタック-ネイティブメソッドスタックは、ローカルメソッド情報を保存します。各スレッドに別々のネイティブメソッドスタックを作成します。
第三に、実行エンジン
実行エンジンで実行されるバイトコードの実行時のデータ領域に割り当てられています。実行エンジンは、バイトコードを読み取り、1でそれを実行します。
通訳-高速、しかし遅い実行バイトコードインタプリタを解釈します。欠点は、この方法が複数回、毎回新しい解像度の必要性と呼ばれるインタプリタいます。
--JIT JITコンパイラコンパイラは、インタプリタの欠点を解消します。バイトコードを変換する際に、実行エンジンは、通訳の助けを使用しますが、それはJITコンパイラを使用するコードを、複製見つけると、コンパイラは全体のバイトコードをコンパイルし、ネイティブコードに変更します。このコードは、ローカルメソッド呼び出しに直接使用することにより、システムの性能を向上させる、繰り返されます。
ガベージコレクタ:収集し、参照されないオブジェクトを削除します。ガベージコレクションは、「()にSystem.gc」を呼び出すことによってトリガすることができますが、実行を保証することはできません。JVMのガベージコレクションのオブジェクトが作成されます。
、Java Native Interface(JNI)を:JNIは、ネイティブメソッドライブラリと対話し、必要な実行エンジンローカルライブラリを提供します。

おすすめ

転載: www.cnblogs.com/guoziyi/p/11589400.html
おすすめ