工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

JVM | Java 仮想マシンとそのアーキテクチャとは

JVM とは

Java 仮想マシン (JVM) Java コードまたはアプリケーションを駆動するためのランタイム環境を提供するエンジンです。 Java バイトコードを機械語に変換します。 JVM は Java ランタイム環境 (JRE) の一部です。他のプログラミング言語では、コンパイラは特定のシステム用のマシン コードを生成します。ただし、Java コンパイラは、Java 仮想マシンと呼ばれる仮想マシン用のコードを生成します。

JVM のしくみ

まず、Java コードがバイトコードにコンパイルされます。このバイトコードは異なるマシンで解釈されます

ホスト システムと Java ソースの間で、バイトコードは中間言語です。

Java の JVM はメモリ空間の割り当てを担当します。

<センター>

<図>

この JVM チュートリアルでは、次のことを学びます-

JVM アーキテクチャ

この JVM チュートリアルでは、JVM のアーキテクチャを理解しましょう。 Java の JVM アーキテクチャには、クラスローダー、メモリ領域、実行エンジンなどが含まれます。

<センター>

<図>

1) クラスローダー

クラスローダーは、クラスファイルをロードするために使用されるサブシステムです。 3 つの主要な機能を実行します。読み込み、リンク、および初期化。

2) メソッド エリア

JVM メソッド エリアには、メタデータ、定数ランタイム プール、メソッドのコードなどのクラス構造が格納されます。

3) ヒープ

すべてのオブジェクト、関連するインスタンス変数、および配列はヒープに格納されます。このメモリは共通であり、複数のスレッド間で共有されます。

4) JVM 言語スタック

Java 言語スタックはローカル変数を格納し、それは部分的な結果です。各スレッドには、スレッドの作成と同時に作成される独自の JVM スタックがあります。メソッドが呼び出されるたびに新しいフレームが作成され、メソッド呼び出しプロセスが完了すると削除されます。

5) PC レジスター

PC レジスタには、現在実行中の Java 仮想マシン命令のアドレスが格納されます。 Java では、各スレッドに個別の PC レジスタがあります。

6) ネイティブ メソッド スタック

ネイティブ メソッド スタックは、ネイティブ ライブラリに依存するネイティブ コードの命令を保持します。 Java ではなく別の言語で書かれています。

7) 実行エンジン

これは、ハードウェア、ソフトウェア、または完全なシステムをテストするために使用されるソフトウェアの一種です。テスト実行エンジンは、テストされた製品に関する情報を持ちません。

8) ネイティブ メソッド インターフェイス

Native Method Interface はプログラミング フレームワークです。これにより、JVM で実行されている Java コードをライブラリやネイティブ アプリケーションから呼び出すことができます。

9) ネイティブ メソッド ライブラリ

ネイティブ ライブラリは、実行エンジンが必要とするネイティブ ライブラリ (C、C++) のコレクションです。

ソフトウェア コードのコンパイルと実行プロセス

ソフトウェア プログラムを作成して実行するには、次のものが必要です

1) 編集者 – プログラムを入力するには、メモ帳を使用できます

2) コンパイラ – 高言語プログラムをネイティブ マシン コードに変換する

3) リンカー – メイン プログラム内のさまざまなプログラム ファイル参照を組み合わせる。

4) ローダー – 実行のために、ハードディスク、フラッシュ ドライブ、CD などのセカンダリ ストレージ デバイスから RAM にファイルをロードする。コードを実行すると、読み込みが自動的に行われます。

5) 実行 – OS とプロセッサによって処理されるコードの実際の実行。

このような背景を踏まえて、次のビデオを参照し、JVM (Java Virtual Machine) の JVM 内部の動作とアーキテクチャについて学習してください。

ビデオにアクセスできない場合は、ここをクリックしてください

C コードのコンパイルと実行プロセス

JavaにおけるJavaのコンパイル過程を理解する。まず、C でのコンパイルとリンクのプロセスを簡単に見てみましょう。

メインで、2 つの関数 f1 と f2 を呼び出したとします。メイン関数はファイル a1.c に格納されています。

関数 f1 はファイル a2.c に保存されます

関数 f2 はファイル a3.c に保存されます

これらのファイル (a1.c、a2.c、および a3.c) はすべて、コンパイラに供給されます。その出力は、マシン コードである対応するオブジェクト ファイルです。

次のステップでは、リンカーを使用して、これらすべてのオブジェクト ファイルを 1 つの .exe ファイルに統合します。リンカーは、これらすべてのファイルをまとめて .exe ファイルを生成します。

プログラムの実行中、ローダー プログラムは実行のために a.exe を RAM にロードします。

Java VM での Java コードのコンパイルと実行

この JVM チュートリアルでは、JAVA のプロセスを見てみましょう。メインには、f1 と f2 の 2 つのメソッドがあります。

コンパイラは 3 つのファイルをコンパイルし、BYTE コードで構成される 3 つの対応する .class ファイルを生成します。 C とは異なり、リンクは行われません .

Java VM または Java 仮想マシンは RAM に存在します。実行中、クラス・ローダーを使用して、クラス・ファイルが RAM に取り込まれます。 BYTE コードは、セキュリティ違反がないか検証されます。

次に、実行エンジンがバイトコードをネイティブ マシン コードに変換します。これはジャストインタイムのコンパイルです。これが、Java が比較的遅い主な理由の 1 つです。

注: JIT または Just-in-time コンパイラは、Java 仮想マシン (JVM) の一部です。同時に同様の機能を持つバイト コードの一部を解釈します。

Java が解釈言語とコンパイル言語の両方である理由

プログラミング言語は次のように分類されます

コンパイラ プログラムをあるレベルの言語から別のレベルの言語に変換するプログラムです。 C++ プログラムの機械語コードへの変換例。

Java コンパイラは、高レベルの Java コードをバイトコード (機械語の一種) に変換します。

通訳 あるレベルのプログラムを同じレベルの別のプログラミング言語に変換するプログラムです。 Java プログラムの C++ への変換例

Java では、ジャスト イン タイム コード ジェネレーターがバイトコードを同じプログラミング レベルのネイティブ マシン コードに変換します。

したがって、Java はコンパイル言語とインタープリター言語の両方です。

Java が遅いのはなぜですか?

Java の遅さの背後にある 2 つの主な理由は

<オール>
  • 動的リンク: C とは異なり、プログラムが Java で実行されるたびに、リンクは実行時に行われます。
  • ランタイム インタープリター: バイト コードからネイティブ マシン コードへの変換は、実行時に Java で行われるため、さらに速度が低下します
  • ただし、Java の最新バージョンでは、パフォーマンスのボトルネックが大幅に解消されています。

    まとめ :


    Java

    1. 小ネジとは何ですか?
    2. CNCとは何ですか?
    3. Java 10 - スレッドローカル ハンドシェイク
    4. 機械旋削とは何ですか?
    5. アーキテクチャ設計とは?
    6. マシン ボルトとは?
    7. 紡績機とは?
    8. 牛乳自販機とは?
    9. 横中ぐり盤とは?
    10. 自動プレス機とは?
    11. マシン テンディングとは