実際のJava仮想マシン(A) - 仮想マシンの基本的な構造と基本操作

序文


何の完全な読みJava仮想マシン上に本がなかった、最近若干小さいワークロードの数は、Java仮想マシン上で本を最初から最後まで学ぶつもり。「Java仮想マシンの深い理解」を見ての考え方、本はjdk1.7に基づいているので、よく考えて、彼はこれをあきらめ、そして最終的に選んだ「本当のJava仮想マシン--jvmのトラブルシューティングとパフォーマンスの最適化を。」

 

図の基本的な構造、Java仮想マシン


 

 

 図Java仮想マシンに上に示した基本構造

1.クラスローダ・サブシステム:ファイルシステムまたはネットワークからロードするクラスの情報を担当します

2.方法エリア:1.8メタデータ領域(メタスペース)の後、永久ジェネレーション(パーマ)と呼ばれるjdk1.7前にロードされたクラス情報を保存します

3.Javaヒープ:仮想マシンが起動された設立、Javaオブジェクトのインスタンスのほぼすべては、すべてのスレッドがヒープを共有して存在します

4.ダイレクト・メモリ:システムのダイレクト・メモリ・エリアは、アクセスは、Javaプログラムがメモリを直接スキップネイティブJavaヒープの山にアクセスする指示することができ、ダイレクトメモリ使用量も非常に一般的であり、広くNIOに使用されているJavaヒープの部分よりも高速でありますスペース

ガベージコレクションシステム:手順ゾーン、Javaヒープのガベージオブジェクトおよびダイレクト・メモリ・回復

6.Javaスタック:各スレッドがプライベート・スタックを持って、スタックフレーム情報が保存され、ローカル変数、メソッドのパラメータ、およびメソッド呼び出しとリターンは密接に関連しています

7.ネイティブメソッドは、スタック:Javaスタックは、ローカルを呼び出すために使用される方法と同様です

8.PCレジスタ:それはローカルの方法であればネイティブではない、PCレジスタは、現在実行中の命令を指します場合は、各スレッドにプライベート、Javaスレッドは、常にメソッドを実行する任意の時間は、PCレジスタの値が、定義されていません

9.実行エンジン:仮想マシンのバイトコードを実行します

一般的な動作パラメータ第二に、仮想マシン


1.仮想マシンのパラメータ

  -XX:+ PrintGC(jdk9.jdk10使用-Xlogに推奨:GC)、Java仮想マシンを起動するには、このパラメータを使用し、それはGCに対応するログを出力します

  -XX:+ PrintGCDetails、印刷パラメータスタックの詳細、各セクションの使用を説明する(jdk9、-Xlogを使用jdk10:GC用*)

  -XX:+ PrintGCApplicationStoppedTime、あなたは、生成されたGC休止時間のためにアプリケーションを印刷することができます

  -Xloggc:ログ/ gc.log、コマンドログは、現在のディレクトリのファイルフォルダgc.log内のすべてのGCログファイルを記録します

2.クラスのロード/アンロードトラック

  -verbose:クラスは、クラスのロードをトレースアンロードすることができます

  -XX:+ TraceClassLoading(jdk9、-Xlogを使用jdk10:クラス+負荷=情報)クラス追跡をロードします

  -XX:+ TraceClassUnloading(jdk9、-Xlogを使用jdk10:クラス+アン=情報)アンロードクラス追跡

3.仮想マシンのパラメータを確認

  -XX:+ PrintCommandLineFlagsは、仮想マシン自体の暗黙的および明示的なパラメータは、仮想マシンの起動を設定する隠れパラメータであってもよいプリントに転写することができます

3.ヒープの設定パラメータ

  初期スタックを指定-Xms、-Xmxは最大ヒープを指定(例:-Xmx20m -Xms5m、ヒープ初期化5Mの代表、20M利用可能な最大スタック)

  新世代のサイズを指定-Xmn一般的に1/3から1/4のヒープ全体の設定をお勧めします

  -XX:SurvivorRatio、(例:-XX:SurvivorRatio = 2、代表エデン:= 2:1)新世代比エデン領域を指定して領域へ/からします。新世代領域、利用可能な合計サイズ(エデン+から)または(へエデン+)の新世代、通常、同じ大きさのとの領域から

  -XX:NewRatio割合、歳/新世代

4.スタックオーバーフローの取り扱い

  十分なヒープ領域場合は、プログラムが実行されている、それは(メモリ不足)例外OOMがスローされます、Java仮想マシンは、2つのパラメータを提供します

  -XX:+ HeapDumpOnOutOfMemoryErrorは、メモリヒープオーバーフロー全体の情報をエクスポートすることができます

  -XX:HeapDumpPath、エクスポートヒープ・ストレージ・パス(絶対パス)を指定することができます

5.ゾーン設定方法

  JDK1.6とjdk1.7使用-XX:PermSizeをと-XX:MaxPermSizeを永久設定領域と常置領域の最大サイズ

  また、上記永久領域のみ使用可能なメモリによって、デフォルトのシステム・メタデータ領域、メタデータ領域の種類に格納されたメタデータを使用して、完全に除去されたが、まだ-XXを使用することができ、起動jdk8:MaxMetaspaceSizeは、指定されました利用可能な最大

6.スタック構成

  -Xss:スレッドのスタックサイズを指定します。

7.仮想マシンの動作モード

  (1)クライアント・モード

    -clientは、クライアントモードを指定することができます使用した後に、より速く、256メガバイト程度のシステムの最大ヒープMaxHeapSizeをこのモードを開始し、CompliThresholdのデフォルトは1500で、その関数は1500と呼ばれ、JITコンパイラになります

  (2)サーバーモード

    システムが完全に起動されるように、より洗練された最適化アルゴリズムを使用するには、プログラムを最適化するために、システムのパフォーマンスに多くの情報を収集しようと、-serverを開始する遅いサーバーモードを指定することができます使用し、サーバーモードではクライアントモードよりもはるかに高速であります。

    このモデル系約1GB最大スタックMaxHeapSizeで、CompliThresholdデフォルト10000

おすすめ

転載: www.cnblogs.com/gtblog/p/11453304.html