Javaチュートリアルシリーズ2:JavaのJDK、JREおよびJVMは何ですか?

情熱的な裁判所のみ春の数ヶ月、人々から離れて落下するためにユタによります。

ここに画像を挿入説明

アウトライン

この章では、JDK、JREとJVMの違いを理解しています。どのようにJVMの作品?クラスローダ、インタプリタとJITコンパイラがどのようなものです。いくつかのインタビューの質問があります。

Javaプログラムの実行

Javaのメモリ領域に踏み込んで前に、まずJavaソースファイルが実行される方法を理解します。

  1. 私たちは、エディタを使用しSimple.Javaたソースコードファイルを書くこと。
  2. これは、バイトコードプログラムにコンパイルする必要があります。コンパイラ(javac)のソースコードのコンパイルSimple.classファイルを。
  3. このサフィックス.class任意のプラットフォーム/オペレーティングシステムでのクラスファイルJVMJava仮想マシン)の実行。
  4. JVMこれは、マシンによってネイティブマシンコードの実行ファイルにバイトコードを変換するための責任があります。

ここに画像を挿入説明

JVMとは何ですか?

Java仮想マシンは、( JVMが実行されているJava仮想マシンのバイトコード。ファイルコンパイルされたファイルを。ファイルが含まれている解決可能なバイトコードを。javax.java.class.classJVM

実際には、JVM単にするJavaランタイム環境と仕様のバイトコードを提供しています。異なるメーカーは、この仕様の異なる実装を提供します。たとえば、このWikiページが一覧表示されます、他のJVMの実装を

最も人気のあるJVM仮想マシンがされてOracleによって提供Hostspotする仮想マシン(旧として知られていますSun Microsystems,Inc。)。

JVM仮想マシンがために、最新のメモリモデル、ガベージコレクタと適応オプティマイザと組み合わせて、高度な技術の多くを使用するJavaアプリケーションの最高のパフォーマンスを提供します。

JVM仮想マシンは、2つの異なるモード、ありclientモードおよびserverモード。かかわらずserverclient似ていますが、server特別にピーク動作速度を最大化するように調整されています。これは、サーバーアプリケーションを長時間実行するために使用されている、彼らはむしろ、クイックスタートや小さなメモリフットプリントの実行時よりも、可能な限り迅速に速度にする必要があります。開発者が指定することができ-client、または-server、所望のモードを選択します。

JVMそれが提供するので、仮想マシンと呼ばれるAPI機械の基礎となるオペレーティングシステムおよびハードウェアアーキテクチャに依存しません。このハードウェアとオペレーティングシステムの独立Java一度プログラム書き込みは、どこでも必要な基礎を実行します。

JVMアーキテクチャ

ここに画像を挿入説明

クラスローダ

クラスローダはにクラスファイルをロードするために使用されますJVM負荷に以下の3つのステップに分け、およびリンク初期化。

  1. ロード
  • クラスをロードするためには、JVM3種類のローダがあります。Bootstrapextensionおよびアプリケーションのクラスローダ。
  • クラスファイルをロードするとき、JVMあなたはこのクラスのすべての依存関係を検索します。
  • ファーストクラスローダは、親ローダーがロードする場合は、現在のクラスローダの親があるかどうかを判断します。
  • Bootstrapこれは、ルートクラスローダであるBootstrapローダーがクラスを見つけようとします。これは、スキャンしJRE libたフォルダをrt.jar
  • あなたがクラスを見つけることができない場合は、extensionローダがしますjre \ lib \ extクラスファイルのパッケージを検索します。
  • あなたがクラスを見つけることができない場合は、アプリケーションのクラスローダシステムはしますCLASSPATHすべての環境変数を検索しJa、ファイルやクラスrを
  • 任意のクラスローダは、クラスローダがロードクラスで、クラスを見つけ、それ以外の場合はスローClassNotFoundException
  1. リンク:クラスのクラスローダの負荷は、リンクを実行します。バイトコード検証プログラムの検証生成されたバイトコード検証が失敗した場合、我々は検証エラーを受け取ります、正しいです。また、クラスの静的変数とメモリ割り当てを実行するためのメソッドを持っています。
  2. 初期化:これは、すべての静的変数が元の値を割り当てられ、静的ブロックを実行するクラスローディングの最後の段階です。
JVMのメモリ領域

JVMメモリ領域は、アプリケーションデータの特定の部分を格納するために複数の部分に分割されています。

  • 方法エリア:例えば、そのような実行時定数プール、メソッドコード、などの基本情報として記憶クラス構造。
  • ヒープ:アプリケーションの実行中に保存されているすべてのオブジェクトが作成されました。
  • スタック:ローカル変数と中間結果を格納します。自分のスレッドを作成するために、すべてのこれらの変数はプライベートです。各スレッドは、独自の持っているJVMスタックを、同時に作成されたスレッドを作成します。したがって、そのようなすべてのローカル変数は、スレッドローカル変数と呼ばれます。
  • PCは登録:現在実行中の文の物理メモリアドレスを格納します。Javaでは、各スレッドは、独自の個別PCレジスタを持っています。
  • ローカル・エリア・方法:多くの基礎となるコードの言語のようにCやCで書かれています。ネイティブメソッドスタック命令をネイティブコードを保持します。

JVMの実行エンジン

割り当てられたJVM実行エンジンで実行されるすべてのコード。バイトコード実行エンジンは、読み込みと11が実行されます。これは、マシンコードにバイトコードを変換するために2つの組み込みインタプリタとJITコンパイラを使用して実行します。

ここに画像を挿入説明

使用するとJVM、インタプリタとコンパイラがネイティブコードを生成します。最適化とコストの最適化の度合いである彼らどのようにネイティブコード、除きます。

通訳

JVMあらかじめ定義されて説明したJVMネイティブ命令に対応するに指示マッピングマシン命令、ほぼすべてのバイトコード命令。それは、直接実行任意の最適化を実行しないバイトコード。

JITコンパイラ

パフォーマンス、改善するために、JITコンパイラとランタイムのJVM相互作用、およびネイティブマシンコードにコンパイルされたバイトコードの適切なシーケンスを。典型的には、JITコンパイラは、次に、マシンコードの最適化に変換されたコード(最初のインタプリタと文が同じではない)、最適化されたコードを使用します。

デフォルトでは、JITコンパイラが有効になっています。あなたは無効にすることができJIT、この場合には、インタプリタは全体説明します、コンパイラをJavaプロセスを。診断や解決に加えてJIT、コンパイルの問題を、しかし、無効にすることはお勧めしませんJITコンパイラを。

JREとは何ですか

Javaランタイム環境は、( JRE意志ライブラリ(というソフトウェアパッケージですjar)とJava一緒に同梱されている仮想マシン、およびその他のコンポーネントがで実行するようにJava記述されたアプリケーション。JRE唯一のJVMそれの一部。

実行するにはJavaアプリケーションでのみお使いのコンピュータにインストールする必要がありますJREこれは、コンピュータ上で実行されるJavaアプリケーションの最小要件です。

JREそれは、次のコンポーネントが含まれています -

  1. DLLファイルを使用するためには、Java HotSpotクライアント仮想マシン。
  2. Java HotSpot Server仮想マシンは、DLLファイルを使用します。
  3. Javaランタイム環境で使用するコードライブラリ、プロパティ設定、およびリソースファイル。例のrt.jarのとcharsets.jarください。
  4. このようlocaledata.jarなどのJavaファイルの拡張子、。
  5. これは、セキュリティ管理のために使用されるファイルが含まれています。これには、セキュリティポリシー(java.policy)およびセキュリティプロパティ(java.security)のファイルがあります。
  6. Jarファイルは、アプレットのサポートクラスが含まれています。
  7. TrueTypeフォントファイルは、使用するプラットフォームが含まれています。

JREJDKダウンロード、個別のダウンロードの一部。JREプラットフォーム依存。あなたは、インポートを選択し、お使いのコンピュータ(オペレーティングシステムやアーキテクチャ)の種類に応じてインストールできるJREソフトウェアパッケージ。

たとえば、あなたがすることはできません32お使いのコンピュータのビットにインストールする64位置JRE同様に、のためのリリースバージョン実行されません。そして、その逆。WindowsJRELinux

JDKとは何ですか

JDKよりJRE、より包括的な。JDKこれは、JREすべての部門が持っていると、デバッグおよびモニターの開発Javaアプリケーション開発ツールを。開発するときに必要Javaアプリケーションを、あなたがする必要がありますJDK

JDK以下に同梱されていくつかの重要なコンポーネント:

  • アプレットビューア - このツールは、Webブラウザの事情なしで実行するために使用し、Javaアプレットをデバッグすることができます
  • apt - 注釈処理ツール
  • extcheck - 競合を検出するためのJARファイルユーティリティ
  • javadocツール - ドキュメントジェネレータは、自動的にソースコードのコメントからドキュメントを生成することができます
  • jarファイル - 関連するクラスライブラリは、JARファイルにパッケージ化することをアーカイブプログラム。このツールは、JARファイルを管理することができます
  • jarsignerの - JAR署名および検証ツールてjavap - クラスファイル逆アセンブラ
  • Java Web StartのJNLPランチャーアプリケーション - のjavaws
  • jconsole - Java監視および管理コンソール
  • jhat - Javaのヒープ解析ツール
  • jrunscript - Javaコマンドラインシェルスクリプト
  • jstack - JavaのJavaスレッドのスタックトレースユーティリティを印刷
  • キーツール - ライブラリを操作するための重要なツール
  • policytoolを - ポリシーの作成と管理ツール
  • XJC - XMLバインディングのJava API(JAXB)APIの一部。これは、XMLスキーマを受け入れ、Javaクラスを生成します

そして、JRE同じことがJDKまた、プラットフォームに依存しています。そのため、ダウンロードにお使いのコンピュータのJDK時にパッケージ、より多くの注意を払ってください。

JDK、JREとJVMの違い

以上の議論を踏まえ、当社は、これらの3つの間に次の関係を描くことができます

JRE = JVM   libraries to run Java application.

JDK = JRE   tools to develop Java Application.

ここに画像を挿入説明

あなたがコードを書いている場合は要するに、Javaアプリケーション開発者は、あなたのコンピュータにインストールする必要がありますJDKあなたが実行したい場合は、Java内蔵のアプリケーションでは、唯一のコンピュータにインストールする必要がありますJRE

JDK、JREおよびJVM関連のインタビューの質問

あなたは私たちが、この記事で説明してきたかを理解した場合、我々は任意のインタビューの質問は難しくありません直面しています。しかし、まだ我々は、次の質問に答えるために準備する必要があります:

JVMアーキテクチャとは何ですか

すでに前に詳細に説明しました。

Javaクラスローダのいくつかの種類があります。

Bootstrapextension、アプリケーションクラスローダとカスタムクラスローダ。

どのようにクラスローダはJavaで働いていますか?

クラスローダは、その中で事前に定義された場所をスキャンしますjarファイルとクラス。文書のすべてのこれらのタイプ、それらの走査経路、および必要なクラスを見つけます。あなたがそれらを見つけた場合、負荷、およびリンク初期クラスファイル。

JREの違いとJVM?

JVMあなたは、Javaアプリケーション環境を実行するための仕様を実行すると。Hotspot JVMこのような実装は、仕様です。これは、クラスファイルをロードし、通訳や使用してJITマシンコードにバイトコードに変換して実行するようにコンパイラに。

インタプリタとJITコンパイラの違いは?

プログレッシブインタプリタのバイトコードの解釈と実行順序。これは、パフォーマンスの低下を引き起こす可能性があります。JITコードブロックの分析のためのプロセスを追加し、より最適化されたマシンコードを調製するために、コンパイラの最適化。

JDKおよびJREのダウンロード


ここに画像を挿入説明

マイクロチャンネル公衆番号へ???注意Javaの乾燥
時間から乾燥を共有する時間情報へ

原文链接:-詳細な分析のJava JDK、JREおよびJVMは何ですか

公開された112元の記事 ウォン称賛90 ビュー35万+

おすすめ

転載: blog.csdn.net/dandandeshangni/article/details/101287026