Java エコシステムの概要

PHPz
リリース: 2024-08-21 06:20:32
オリジナル
1000 人が閲覧しました

目次

  1. はじめに
  2. JVM (Java 仮想マシン)
    • JVM のアーキテクチャ
      • クラスローダー
      • JVMメモリ
        • メソッドエリア
        • ヒープ
        • スタックエリア
        • プログラムカウンター (PC) レジスタ
        • ネイティブ メソッド スタック
      • 実行エンジン
        • 通訳
        • ジャストインタイム (JIT) コンパイラー
        • ガベージコレクター
  3. JRE (Java ランタイム環境)
    • JRE の主要コンポーネント
      • 実行タスク
      • クラスライブラリ
      • Java ネイティブ インターフェイス (JNI)
      • セキュリティマネージャー
  4. JDK (Java 開発キット)
    • JDK の主要な機能
      • javac (Java コンパイラ)
      • java (Java アプリケーションランチャー)
      • jdb (Java デバッガー)
      • jar (Java アーカイブ ツール)
      • javadoc (Java ドキュメントジェネレーター)
  5. JVM、JRE、JDK: 違いは何ですか?
  6. JDK、JRE、JVM 階層

導入

Java エコシステムは、Java プログラミング言語を取り囲み、サポートする幅広いツール、テクノロジー、ライブラリ、およびフレームワークのセットです。 Java アプリケーションの開発、デプロイ、管理に必要なすべてが含まれています。 JDK、JRE、JVM を中心に展開します

JVM (Java 開発キット)

JVM は、コンピュータで Java プログラムや Java バイトコードにコンパイルされた他の言語を実行できるようにするトランスレーターのように機能します。コードは、コンピュータのハードウェアが理解して実行できるものに変換されます。

JVM のアーキテクチャ

Java Ecosystem Overview

クラスローダー

  1. ロード中
    .class ファイルをメモリにロードします。実行のためにクラス ファイル (Java バイトコード) を検索、ロード、およびリンクします。

  2. リンク中

    • 検証: バイトコードを検証します。
    • 準備: 静的変数にメモリを割り当て、メモリをデフォルト値に初期化します。
    • 解決策: シンボリック参照を直接参照に解決します。
  3. 初期化
    初期化は、JVM がクラスまたはインターフェイスを使用できるように準備する最後のステップです。このステップは、クラスが (メモリに) ロードされ、リンクされた後に実行されます。

JVMメモリ

  1. メソッド領域
    メソッド領域 メソッドや変数、実行時定数プール、メソッドのコードなどのクラスレベルのデータを格納します。

    public class Person {
        private String name;
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    ログイン後にコピー
    ログイン後にコピー

    クラス Person を定義すると、メソッド領域には、そのメソッド (setName) とフィールド (name) を含む Person クラスの構造と、メソッド名や定数値などの参照を含むランタイム定数プールが格納されます。

  2. ヒープ
    ヒープは、ランタイム メモリ オブジェクトが割り当てられる場所です。ヒープはすべてのスレッドで共有され、ガベージ コレクション プロセスが行われる場所です。

    Person p = new Person();
    
    ログイン後にコピー
    ログイン後にコピー

    新しい Person オブジェクトを作成すると、ヒープに割り当てられます。

  3. スタックエリア
    スタック領域には、ローカル変数、オペランド スタック、実行中のクラスのランタイム定数プールへの参照が含まれるフレームが格納されます。各スレッドには独自のスタックがあります。

    public void someMethod() {
        int a = 10;
        int b = 20;
        int sum = a + b;
    }
    
    ログイン後にコピー
    ログイン後にコピー

    someMethod が呼び出されるたびに、新しいフレームがスタック領域にプッシュされます。このフレームには、ローカル変数 (a、b、sum)、中間計算用のオペランド スタック、およびランタイム定数プール内のメソッドのクラスへの参照が含まれています。

  4. プログラムカウンター (PC) レジスタ
    PC には、現在実行されている JVM 命令のアドレスが含まれます。各スレッドには独自の PC レジスタがあります。

  5. ネイティブ メソッド スタック
    Java スタックに似ていますが、ネイティブ メソッドに使用されます。

実行エンジン

  1. 通訳
    インタプリタは Java バイトコードを読み取って 1 行ずつ実行し、各バイトコード命令を CPU で実行できる一連のマシンレベル命令に変換します。

  2. ジャストインタイム (JIT) コンパイラー
    実行時にバイトコードをネイティブ マシン コードに変換して、パフォーマンスを向上させます。

  3. ガベージコレクター
    ガベージ コレクターは、JVM 内のメモリを自動的に管理します。使用されなくなったメモリを特定して割り当てを解除し、新しいオブジェクトのために解放します。

JRE

JRE は、Java アプリケーションを実行するために必要な環境を提供するソフトウェア パッケージです。これはマシン上で Java バイトコードを実行するように設計されており、Java の「一度書いたらどこでも実行できる」(WORA) 原則の重要な部分となっています。

public class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
}
ログイン後にコピー
ログイン後にコピー
Person p = new Person();
ログイン後にコピー
ログイン後にコピー
public void someMethod() {
    int a = 10;
    int b = 20;
    int sum = a + b;
}
ログイン後にコピー
ログイン後にコピー
JDK (Java Development Kit)
│
├── JRE (Java Runtime Environment)
│   │
│   ├── JVM (Java Virtual Machine)
│   │   ├── Class Loader
│   │   ├── Bytecode Verifier
│   │   ├── Execution Engine
│   │   │   ├── Interpreter
│   │   │   ├── Just-In-Time (JIT) Compiler
│   │   │   └── Garbage Collector
│   │   └── Runtime Libraries (core libraries like java.lang, java.util, etc.)
│   │
│   └── Java APIs (Core libraries and additional libraries)
│
├── Development Tools (like javac, jdb, jar, javadoc, etc.)
└── Documentation (API docs, guides)
ログイン後にコピー
ログイン後にコピー
<🎝><🎝><🎝>JRE の主要な<🎝>コンポーネント<🎝>

  1. 実行<🎝>タスク
    <🎝>JRE<🎝>は、<🎝>JVM<🎝>と< 🎝><🎝>必要な<🎝>ライブラリ<🎝>と<🎝>リソース。<🎝>JRE<🎝>は<🎝>JVM<🎝>が<🎝>すべてを<🎝>持っていることを<🎝>保証します。 ><🎝>これらの<🎝>タスクを<🎝>任意の<🎝>プラットフォームで<🎝>実行する<🎝>必要があります。<🎝><🎝>について<🎝>考えてください<🎝> JRE<🎝>として<🎝><🎝><🎝>JVM、<🎝>重い<🎝>を<🎝>含む<🎝>完全な<🎝>パッケージ<🎝> <🎝>リフティング、<🎝>、および<🎝>Java<🎝>アプリケーションの<🎝>実行<🎝>を<🎝>サポートする<🎝>その他の<🎝>コンポーネント<🎝>。

  2. クラス<🎝>ライブラリ
    JRE<🎝>には、<🎝>標準<🎝>Java<🎝>クラス<🎝>ライブラリの<🎝>セット<🎝>が含まれており、<🎝>再利用可能な<🎝>コードを<🎝>提供します<🎝>一般的な<🎝>タスク、<🎝>データ<🎝>構造、<🎝>I/O、<🎝>ネットワーク、<🎝>同時実行性、<🎝>などの<🎝>実行用<🎝>そして<🎝>さらに。

  3. Java<🎝>ネイティブ<🎝>インターフェース<🎝>(JNI)
    JNI<🎝>により、<🎝>Java<🎝>アプリケーション<🎝>が<🎝>言語<🎝>で書かれた<🎝>ネイティブ<🎝>コード<🎝>と<🎝>対話<🎝>できるようになります<🎝>。 🎝>C<🎝>または<🎝>C++。<🎝>この<🎝>機能<🎝>は<🎝>プラットフォーム固有の<🎝>機能を<🎝>統合するために<🎝>不可欠<🎝>です<🎝>または<🎝>既存の<🎝>ネイティブ<🎝>ライブラリを使用します。

  4. セキュリティ<🎝>マネージャー<🎝>
    <🎝>セキュリティ<🎝>マネージャ<🎝>は、<🎝>Java<🎝>アプリケーションの<🎝>セキュリティ<🎝>ポリシー<🎝>を適用し、<🎝>など<🎝>アクション<🎝>を<🎝>制限します。 <🎝>ファイル<🎝>アクセス、<🎝>ネットワーク<🎝>接続<🎝>、および<🎝>潜在的に<🎝>安全でない<🎝>コードの<🎝>実行<🎝>。

<🎝><🎝> <🎝><🎝> <🎝><🎝>JDK<🎝>(Java<🎝>開発<🎝>キット)

JDK<🎝> は<🎝>開発者<🎝>による<🎝>書き込み、<🎝>コンパイル、<🎝>デバッグ、<🎝>を可能にする<🎝>ツール<🎝>です。 <🎝><🎝>Java<🎝>アプリケーションを<🎝>実行します。<🎝>それ<🎝>は<🎝>JRE<🎝>の<🎝>スーパーセット<🎝>であり、<🎝>追加の<🎝>が含まれています<🎝>Java<🎝>開発用の<🎝>ツール<🎝>。

<🎝><🎝> <🎝><🎝> <🎝><🎝><🎝>JDK<🎝>のコア<🎝>機能<🎝>

  • javac<🎝>(Java<🎝>コンパイラ)
    javac<🎝> は、<🎝>Java<🎝>ソース<🎝>コード<🎝>(.java<🎝>ファイル)<🎝>を<🎝>に<🎝>変換するために<🎝>を<🎝>使用します。 >バイトコード<🎝>(.class<🎝>ファイル)。<🎝>この<🎝>バイトコード<🎝>は<🎝>その後<🎝><🎝><🎝>Java<🎝>仮想によって<🎝>実行されます。 <🎝>マシン<🎝>(JVM).

  • java<🎝>(Java<🎝>アプリケーション<🎝>ランチャー)
    java<🎝>コマンド<🎝>は、<🎝>Java<🎝>アプリケーションを<🎝>起動します。<🎝>必要な<🎝>クラス<🎝>ファイル、<🎝>を<🎝>ロードします。 <🎝><🎝>バイトコードを<🎝>解釈し、<🎝><🎝>アプリケーションを<🎝>開始します。

  • jdb<🎝>(Java<🎝>デバッガー)
    jdb<🎝> は<🎝>Java<🎝>プログラム用の<🎝>コマンドライン<🎝>デバッガ<🎝>です。<🎝>これにより<🎝>あなたは<🎝>できるようになります。 ><🎝>実行時に<🎝>Java<🎝>アプリケーション<🎝>を検査<🎝>し、<🎝>デバッグします。

  • jar<🎝>(Java<🎝>アーカイブ<🎝>ツール)
    jar<🎝>ツール<🎝>パッケージ<🎝>複数の<🎝>ファイル<🎝>を<🎝>単一の<🎝>アーカイブ<🎝>ファイル、<🎝>通常<🎝>で<🎝> <🎝>.jar<🎝>拡張子<🎝>これらの<🎝>JAR<🎝>ファイル<🎝>は<🎝>Java<🎝>アプリケーション<🎝>を<🎝>配布するために<🎝>使用されます<🎝>。 <🎝>ライブラリ

  • javadoc<🎝>(Java<🎝>ドキュメント<🎝>ジェネレーター)
    javadoc<🎝>は、<🎝>特別な<🎝>/**<🎝を<🎝>使用して、<🎝>Java<🎝>ソース<🎝>コードから<🎝>HTML<🎝>ドキュメント<🎝>を生成します。 >*/<🎝>コメント<🎝><🎝>として知られている<🎝>ドキュメント<🎝>コメント。

JVM vs JVE vs JDK, what's the difference?

Feature/Aspect JVM JRE JDK
Purpose Executes Java bytecode Provides the environment to run Java applications Provides tools to develop, compile, debug, and run Java applications
Includes JVM itself, which includes class loader, bytecode verifier, and execution engine JVM + Core libraries (like java.lang, java.util, etc.), and other runtime components JRE + Development tools (like javac, jdb, jar, etc.), documentation
Components - Class Loader
- Bytecode Verifier
- Execution Engine (Interpreter, JIT)
- JVM
- Core Java libraries
- Java Plug-in
- Java Web Start
- JRE
- Java Compiler (javac)
- JAR Tool (jar)
- Debugger (jdb)
- Documentation Generator (javadoc)
- Other development tools
Main Functionality Executes Java bytecode, enabling platform independence Provides the minimum requirements to run Java applications Allows developers to write, compile, and debug Java code
Who Uses It? End-users running Java applications End-users running Java applications Java developers writing and compiling Java applications
Installation Size Smallest Larger than JVM but smaller than JDK Largest (includes JRE and development tools)
Developer Tools No No Yes (includes compiler, debugger, profiler, etc.)
Required to Run Java Programs Yes Yes No (but needed to create Java programs)
Platform Independence Provides platform independence by abstracting the underlying hardware Yes, because it includes the JVM Yes, it includes everything from JRE
Examples of Usage - Running any Java application (e.g., desktop applications, servers) - Running Java applications in production or end-user environments - Writing and compiling Java code
- Packaging applications
- Debugging
Availability Part of JRE and JDK Standalone or part of JDK Standalone package

JDK, JRE, JVM hierarchy

JDK (Java Development Kit)
│
├── JRE (Java Runtime Environment)
│   │
│   ├── JVM (Java Virtual Machine)
│   │   ├── Class Loader
│   │   ├── Bytecode Verifier
│   │   ├── Execution Engine
│   │   │   ├── Interpreter
│   │   │   ├── Just-In-Time (JIT) Compiler
│   │   │   └── Garbage Collector
│   │   └── Runtime Libraries (core libraries like java.lang, java.util, etc.)
│   │
│   └── Java APIs (Core libraries and additional libraries)
│
├── Development Tools (like javac, jdb, jar, javadoc, etc.)
└── Documentation (API docs, guides)
ログイン後にコピー
ログイン後にコピー

以上がJava エコシステムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!