情熱的な裁判所のみ春の数ヶ月、人々から離れて落下するためにユタによります。
アウトライン
この章では、JDK、JREとJVMの違いを理解しています。どのようにJVMの作品?クラスローダ、インタプリタとJITコンパイラがどのようなものです。いくつかのインタビューの質問があります。
Javaプログラムの実行
Javaのメモリ領域に踏み込んで前に、まずJavaソースファイルが実行される方法を理解します。
- 私たちは、エディタを使用し
Simple.Java
たソースコードファイルを書くこと。 - これは、バイトコードプログラムにコンパイルする必要があります。コンパイラ(
javac
)のソースコードのコンパイルSimple.class
ファイルを。 - このサフィックス
.class
任意のプラットフォーム/オペレーティングシステムでのクラスファイルJVM
(Java
仮想マシン)の実行。 JVM
これは、マシンによってネイティブマシンコードの実行ファイルにバイトコードを変換するための責任があります。
JVMとは何ですか?
Java
仮想マシンは、( JVM
)が実行されているJava
仮想マシンのバイトコード。ファイルコンパイルされたファイルを。ファイルが含まれている解決可能なバイトコードを。javax
.java
.class
.class
JVM
実際には、JVM
単にするJava
ランタイム環境と仕様のバイトコードを提供しています。異なるメーカーは、この仕様の異なる実装を提供します。たとえば、このWiki
ページが一覧表示されます、他のJVMの実装を。
最も人気のあるJVM
仮想マシンがされてOracle
によって提供Hostspot
する仮想マシン(旧として知られていますSun Microsystems,Inc
。)。
JVM
仮想マシンがために、最新のメモリモデル、ガベージコレクタと適応オプティマイザと組み合わせて、高度な技術の多くを使用するJava
アプリケーションの最高のパフォーマンスを提供します。
JVM
仮想マシンは、2つの異なるモード、ありclient
モードおよびserver
モード。かかわらずserver
とclient
似ていますが、server
特別にピーク動作速度を最大化するように調整されています。これは、サーバーアプリケーションを長時間実行するために使用されている、彼らはむしろ、クイックスタートや小さなメモリフットプリントの実行時よりも、可能な限り迅速に速度にする必要があります。開発者が指定することができ-client
、または-server
、所望のモードを選択します。
JVM
それが提供するので、仮想マシンと呼ばれるAPI
機械の基礎となるオペレーティングシステムおよびハードウェアアーキテクチャに依存しません。このハードウェアとオペレーティングシステムの独立Java
一度プログラム書き込みは、どこでも必要な基礎を実行します。
JVMアーキテクチャ
クラスローダ
クラスローダはにクラスファイルをロードするために使用されますJVM
。負荷に以下の3つのステップに分け、およびリンク初期化。
- ロード
- クラスをロードするためには、
JVM
3種類のローダがあります。Bootstrap
、extension
およびアプリケーションのクラスローダ。 - クラスファイルをロードするとき、
JVM
あなたはこのクラスのすべての依存関係を検索します。 - ファーストクラスローダは、親ローダーがロードする場合は、現在のクラスローダの親があるかどうかを判断します。
Bootstrap
これは、ルートクラスローダであるBootstrap
ローダーがクラスを見つけようとします。これは、スキャンしJRE
lib
たフォルダをrt.jar
。- あなたがクラスを見つけることができない場合は、
extension
ローダがしますjre \ lib \ ext
クラスファイルのパッケージを検索します。 - あなたがクラスを見つけることができない場合は、アプリケーションのクラスローダシステムはします
CLASSPATH
すべての環境変数を検索しJa
、ファイルやクラスrを - 任意のクラスローダは、クラスローダがロードクラスで、クラスを見つけ、それ以外の場合はスロー
ClassNotFoundException
。
- リンク:クラスのクラスローダの負荷は、リンクを実行します。バイトコード検証プログラムの検証生成されたバイトコード検証が失敗した場合、我々は検証エラーを受け取ります、正しいです。また、クラスの静的変数とメモリ割り当てを実行するためのメソッドを持っています。
- 初期化:これは、すべての静的変数が元の値を割り当てられ、静的ブロックを実行するクラスローディングの最後の段階です。
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
それは、次のコンポーネントが含まれています -
- DLLファイルを使用するためには、Java HotSpotクライアント仮想マシン。
- Java HotSpot Server仮想マシンは、DLLファイルを使用します。
- Javaランタイム環境で使用するコードライブラリ、プロパティ設定、およびリソースファイル。例のrt.jarのとcharsets.jarください。
- このようlocaledata.jarなどのJavaファイルの拡張子、。
- これは、セキュリティ管理のために使用されるファイルが含まれています。これには、セキュリティポリシー(java.policy)およびセキュリティプロパティ(java.security)のファイルがあります。
- Jarファイルは、アプレットのサポートクラスが含まれています。
- TrueTypeフォントファイルは、使用するプラットフォームが含まれています。
JRE
JDK
ダウンロード、個別のダウンロードの一部。JRE
プラットフォーム依存。あなたは、インポートを選択し、お使いのコンピュータ(オペレーティングシステムやアーキテクチャ)の種類に応じてインストールできるJRE
ソフトウェアパッケージ。
たとえば、あなたがすることはできません32
お使いのコンピュータのビットにインストールする64
位置JRE
。同様に、のためのリリースバージョン実行されません。そして、その逆。Windows
JRE
Linux
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クラスローダのいくつかの種類があります。
Bootstrap
、extension
、アプリケーションクラスローダとカスタムクラスローダ。
どのようにクラスローダはJavaで働いていますか?
クラスローダは、その中で事前に定義された場所をスキャンしますjar
ファイルとクラス。文書のすべてのこれらのタイプ、それらの走査経路、および必要なクラスを見つけます。あなたがそれらを見つけた場合、負荷、およびリンク初期クラスファイル。
JREの違いとJVM?
JVM
あなたは、Javaアプリケーション環境を実行するための仕様を実行すると。Hotspot
JVM
このような実装は、仕様です。これは、クラスファイルをロードし、通訳や使用してJIT
マシンコードにバイトコードに変換して実行するようにコンパイラに。
インタプリタとJITコンパイラの違いは?
プログレッシブインタプリタのバイトコードの解釈と実行順序。これは、パフォーマンスの低下を引き起こす可能性があります。JIT
コードブロックの分析のためのプロセスを追加し、より最適化されたマシンコードを調製するために、コンパイラの最適化。
JDKおよびJREのダウンロード
- JDK:https://www.oracle.com/technetwork/java/javase/downloads/index.html
- JRE https://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html
マイクロチャンネル公衆番号へ???注意Javaの乾燥
時間から乾燥を共有する時間情報へ