ホームページ >Java >&#&チュートリアル >Java エコシステムの概要

Java エコシステムの概要

PHPz
PHPzオリジナル
2024-08-21 06:20:321052ブラウズ

目次

  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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。