序文
何の完全な読み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