1-JVMとは
1.1JVMとは
JVMはJavaVirtual Machine(Java Virtual Machine)の略です。JVMはコンピューティングデバイスの仕様であり、実際のコンピューター上でさまざまなコンピューター機能をシミュレートすることによって実現される架空のコンピューターです。
1.2主流の仮想マシン
仮想マシン名 | 基本的な紹介 |
---|---|
ホットスポット | Oracle / SunJDKとOpenJDKの両方がHotSPotVMの同じコアを使用します |
J9 | J9は、IBMによって開発された高度にモジュール化されたJVMです。 |
JRockit | JRockitとHotSpotは どちらもOracleに属しています。これまで、Oracleは、独自の利点を持つ2つの仮想マシンであるHotSpotとJRockitの統合を推進してきました。 |
ジン | HostPotに基づくAzulSystemsによって改善された高性能で低遅延のJVM |
Dalvik | AndroidでのDalvikの名前はJVMではありませんが、その核となるのは徹底的なJVMです。 |
2-JVMとオペレーティングシステム
プログラムとオペレーティングシステムの間にJVMを追加する理由
Javaは、自動メモリ管理などの一連の機能を提供する非常に抽象的な言語です。これらの機能をオペレーティングシステムに直接実装することは不可能であるため、JVMではある程度の変換が必要です。
図からわかるように、JVM抽象化レイヤーを使用すると、Javaをクロスプラットフォームにすることができます。JVMは、.classファイルが正しく実行され、Linux、Windows、MacOSなどのプラットフォームで実行できることを確認するだけで済みます。Javaクロスプラットフォームの重要性は、一度コンパイルしてどこでも実行できることであり、JVMはこれを実行できます。
アプリケーション、JVM、およびオペレーティングシステム間の関係
JVMとオペレーティングシステムの関係:JVMは開発言語を継承し、オペレーティングシステムに接続します。その中間インターフェイスはバイトコードです。
JVM、JRE、JDK間の関係
JVMは、Javaプログラムが実行できるコアです。。ただし、JVM自体は何もできないことに注意してください。本番マテリアル(.classファイル)を提供する必要があります。JVMだけでは、コンパイルを完了してどこでも実行することはできません。ファイルの操作方法やネットワークへの接続方法など、基本的なクラスライブラリが必要です。Javaシステムは非常に寛大であり、JVM操作に必要なすべてのライブラリを一度にすべてに渡します。JVM標準と実装された多数の基本クラスライブラリは、Javaのランタイム環境を構成します。これは、私たちがよくJRE(Javaランタイム環境)と呼ぶものです。
JDKの場合、それはさらに大きくなります。JREに加えて、JDKは、Java開発の中核であるjavac、java、jarなどの非常に便利な小さなツールも提供します。
コード例
HelloWorld.javaを実行します
package cn.guardwhy.jvm;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello Java!!!");
}
}
Javaプログラムの実行プロセス
JDKツールjavacでコンパイルした後、 HelloWorld.classのバイトコードの結論が生成され
ます。
== Java仮想マシンはスタックベースのアーキテクチャを採用しており、その命令はオペコードとオペランドで構成されています。==これらのバイトコード命令はオペコードと呼ばれます。その中で、getstatic、ldc、invokevirtual、およびreturnはすべてオペコードです。JVMは、これらのオペコードとオペランドの解析に依存して、プログラムの実行を完了します。Javaコマンドを使用して.classファイルを実行する場合、実際にはJVMプロセスを開始するのと同じです。
最後に、JVMはこれらのバイトコードを変換します。最も一般的なのは、説明して実行し、オペコード+オペランドを機械語に変換することです。。もう1つの実行方法は、ジャストインタイムコンパイルであるJITです。実行する前に、特定の条件下でバイトコードをマシンコードにコンパイルします。