Java仮想マシンJVMメモリパーティション、およびコード実施メカニズム

オリジナルリンク: https://blog.csdn.net/zhangren07/article/details/6270842

1. JVMアーキテクチャ

 

1 JVMアーキテクチャ図。

 

 

   メソッド領域:JVMがロードされ格納される情報の種類。前記基本情報タイプ、定数プール、フィールド情報、情報メソッド、クラス変数、クラスローダの基準点、基準クラスのクラスメソッドテーブルなど。

(等-PermSize JVMメモリ構成に対応)

   Javaヒープ:ヒープに保存されているクラスの例外オブジェクトとオブジェクトを含むプログラムを作成したクラスのインスタンスと配列。スタックオブジェクトインスタンスのデータ記憶装置だけでなく、方法の領域タイプ情報に格納されているオブジェクトへのポインタに加えて。

(すべてのJVMスレッド共有ヒープ領域、-Xms -Xmx等に対応したJVMメモリ構成)

   Javaスタック:JVMは、新しいスレッドを作成すると、スレッドはカウンタ(PCレジスタ)があり、スタックします。各メソッド呼び出しのスタックフレームが生成され、スタックフレームは、ローカル変数とオペランドスタックを含んでいます。

(スレッドのJVMスタックは排他的であることを、-Xssに対応するJVMメモリ構成)

  スレッドカウンタ:各スレッドは、次の命令を指して、独自のプログラムカウンタを、持っています。スレッドはネイティブメソッドを呼び出すと、それは未定義です。

   ネイティブメソッドは、スタック:JVMのスレッドがネイティブメソッドスタックがネイティブメソッドにジャンプします呼び出すとき。Javaスタック方法は、ネイティブメソッドの復帰後、再び戻ってジャンプします。

(JVMは、ネイティブメソッド呼び出しをサポートしているので、OSによって占有JVMメモリは、JVMヒープメモリサイズを超える、さらにはローカルメモリリークを生成することができます)

 

2. Javaコードは、ローディング機構をコンパイルされます

 

  Javaソースコードのコンパイルメカニズム

シンボルテーブルに分析入力:文字列javaファイルには、構文木を解析され、シンボルテーブルを生成しています。

注釈プロセス:注釈がコードを生成し、その後、字句や構文解析。

意味解析とクラスファイルを生成します。変数は、検査セマンティック情報の種類を異常キャプチャするかどうか、使用する前に宣言したかどうかをチェックします。生成クラスファイルはさらにない実行可能バイトコード・クラス・ファイルが含まれ、バージョン番号、インターフェイス情報、クラス、定数、メタデータ属性を含み、かつ例外ハンドラは、スーパークラスと実装クラスを示しています。

上記の3つのステップは、「字句解析 - 解析> - >セマンティック分析」であるシーケンシャルビルドプロセス。

  JVMクラスローディング機構

ロード:クラスファイルは、(バイナリをバイトコード)JVMにロードされます。

リンク:ようにクラスファイル形式をチェックし、ローディングクラス関連するインタフェースとクラス、検証のためのプロパティ、メソッド、およびメソッドへのアクセスと。

初期化:クラスの初期化プロセスのロードが実行されなければならない完了されないが、静的な初期化コード、コンストラクタ、静的属性初期化を実行しない後のオブジェクトの最初の主要な使用の実装前に比べ。初期化トリガ条件、前記新たに1)コール; 2)クラスのメソッド呼び出し反射; 3)初期化サブクラスコール; 4)JVMスタートアッププロシージャ指定された初期化クラス。

  日JDKクラスローダの継承


上記のように、JVMのクラスローダがブートストラップクラスローダを除いて、ツリー構造を使用して、親ローダがロードされたかどうかを見に行くだろう、クラスをロードする前に、残りのクラスローダは、最大となっていますルート。クラスローダオブジェクトから別のクラスのパス上の葉に根を避けるためである繰り返しを複数回ロードするクラスローダです。ユーザ定義のクラスローダ、抽象ClassLoaderクラスを継承する必要があります。
(参照詳細に説明:HTTP://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html)

3.強制メカニズムのJavaクラスの
  バイトコードを解釈
定義:ステージは、ソースコードをコンパイルしますソースは、(中間コードの形態)JVMバイトコードをコンパイルしたJVMを解釈し、実行時にそれらが実行され、この方法は、バイトコードインタプリタの実装となります。
手順:バイトコード命令は、JVMのすべてを識別することができる一般的な形式であり、フォーマットは等astore、aload、ポップ、等格納された番号を返す、スタックの数を読み取り、関数の戻り値として、アセンブリ言語フォーマットに類似しています指示。JVMは、これらのコマンドを解釈し、それらを実行、JVMのスレッドスタックおよび実行中などにそのプログラムカウンタを、管理します。
学習ポイントを開く:共有スタックフレームのスタックキャッシュ部
  コンパイラ実装
目的:(あまり効率的解釈)コード実行の性能を向上させるために、SunのJDKバイトコードコンパイラは、マシンコードのサポートを提供します。多くの場合、JITコンパイラと呼ばれ、実行時にコンパイルされました。
ホットスポットVM:実行コードの高周波の実装プロセスにおける米国Sun JDKは、あなたが日JDKが再びホットスポットVMになるので、説明の仕方によって頻繁にコードの使用を継続しないことが、コンパイルされます。
コンパイルモード:-clientと-server。デフォルトでは、パターンJVMは、マシンのデフォルトの設定に応じて有効になっているだけでなく、JVMの送信パラメータにウェイJITモードで指定することができます。以上の2つの物理プロセッサとマシンの2G物理メモリがサーバモード、クライアントモードまたはデフォルトで有効にできるようになりますより多くのがあります。
パフォーマンステスト環境:アプリケーション・サーバーの構成によれば、JBossは-server設定モードをデフォルトとします。
JDKツール:異なるモード、JDKツール機能のポイントは、サーバモードの下より、異なる場合があります。
  コンパイラ実装パフォーマンス最適化
Clientモード:また、C1モデルとして知られ、主にインラインメソッド削除仮想化および冗長性を最適化するために、ネイティブ・コードにコンパイルされたとき。
サーバモード:モードもC2と呼ばれ、C1に基づいて、最適化は、(スタックに割り当て、(point.x変数は基準へのアクセス時間を短縮するために、コード内のローカル変数xを参照する必要がある)スカラーを交換しますオブジェクトは、インビトロ方法で参照されていない場合、直接スタックに割り当てることができる、対象方法は、最適化の自動回収後)終了)との同期を削除(同期書込みモードが、実際の同期同期のアクセスを削除しない3つの形式が実行されます。
がJVMに最適化された後にコンパイルされていないマシンコード最適化された条件が満たされた場合、それを説明するために戻って道を実行します。例えば:元のコードは、同期アクセスが同期されていない後訪れ、元のインターフェイスを実装する唯一のクラスは今ように実装クラスの数に使用されています。
拡張学習ポイント:OSR(スタックに交換)コンパイラ機構、JDK 7多層編集機構。
  コンパイルされたバイトコードの実行対解釈
メモリコンパイラの実装を保存する以上のものを解釈し、より高速な起動解釈実行速度を開始し
、より高い性能のコンパイラの実装を
実行カウンタを解釈またはコンパイル:-CompileThreshold(メソッド番号と呼ばれている)、 - OnStackReplacePercentage(コンパイルされたトリガしきい値OSRか)
4.反射を行う
  反射プロセス
事前に知られていない動的にロードされたクラスタイプ、および指定を行います方法、Javaは主にクラスのクラスとjava.lang.reflectはパッケージを介してサポートされ、共通のコンセプトを反映しています。
反射フレームは非常に柔軟なオブジェクトの呼び出しコードを実装することができるような
  パフォーマンス上の問題を
直接実行より達成反射コードの柔軟性を向上させるが、全体のプロセスはバイトコードにコンパイルに直接呼び出しよりも複雑であるため、性能遅くなります。
JDKのバージョンアップのパフォーマンスに反映されているよう日JDKは6 JDKとの直接実装のギャップ後のパフォーマンスではなく、上昇して実行します。
相対消費性能をgetMethod、より良い性能method.invoke(よりダイレクトコールのみ少し低い)
  性能試験反射
負荷は、JVMが実行されているメモリ使用パーマ領域において増加するようは、動的に生成されたクラスオブジェクトを反映しています。
JVM GCでのデッドクラスオブジェクトは、通常のリカバリの外に回収される、特定のトリガー機構は何ですか?
 
 

おすすめ

転載: blog.csdn.net/tiantian1980/article/details/102721892