JVMシリーズノート - コマンドラインパラメータ

javaコマンドライン

Javaプログラムの実行

二つの方法:

  • 一つは使用することです-cpメインクラスを渡し、最終的にプログラムのパラメータを渡し、その後、パラメータ、および着信パケットの瓶がたくさん。例えば:
    • java -Dkey1=val1 -Dkey2=val2 -cp a.jar:b.jar:c.jar aaa.bbb.ccc.Main arg1 arg2 arg3
    • 上述したように、-Dパラメータで定義されているシステムの特性によってJavaで、System.getProperty(key1)読み出しの方法arg1 arg2 arg3のプロセスパラメータの定義、すなわち、最終mainの関数args配列パラメータ。
  • 第が使用する-jarパラメータを、次に渡されるプログラムパラメータが続く、ジャーパッケージ。例えば:
    • java -Dkey1=val1 -Dkey2=val2 -jar xxx.jar arg1 arg2 arg3
    • これが唯一のjarパッケージを使用することができ、およびパッケージはメインクラスで定義されたディレクトリMETA_INFにMANIFEST.MFのjarファイルを必要とする、それが自動的にメインクラスの開始に進みます

ところで、System.getEnv()取得した環境変数は、通常の意味での環境変数のプロセス(JVM本質はプロセスである)、あるSystem.getProperty(key1)システムプロパティを取得するために、これは、Javaの独自のパラメータの定義であるarg1 arg2、これはに対応し、プログラムパラメータであります受信したパラメータの主な機能。

仮想マシンのパラメータ

操作の設定モード、スタック領域のサイズ、スタックフレーム

-クライアントサーバー

  • これは、仮想マシン、サーバモードスロースタートの動作モードを示しますが、パフォーマンスは全体的に、実行中のクライアントよりも高く、より多くの(限りウォームアップ時間)向けに最適化

-Xss1024k

  • (私は知らない他の制限があるかもしれない)スレッドのスタック領域は、実際には制限1024K、スレッド・スタックの深さをされていないされて表し、理由はスタック領域のサイズの上限に達すると、StackOverflowの例外の結果でした。
  • 各要素は、スタックフレームのサイズが固定されていないスレッドのスタックのスタックフレーム(各メソッド呼び出しスタックフレームのための1つ)です。大きなスタックフレームは、その後、スタックの深さが小さくなるのであれば、小さなスタックフレーム、スタックの深さになります大(スタック領域のスタックフレームサイズ= *深いスタックので)。
  • スタックフレームは、メモリのセクションとして理解することができ、スタック自体がフレーム状の構造をスタックされていない、それはランダムアクセス読み出しおよびスタックフレームに書き込みを挙げることができます。
  • 少なくとも含むフレームスタックローカル変数のテーブルオペランドスタックフレームデータ領域

スタックフレームの構造

ローカル変数テーブル

非常に単純な、私たちのメソッドのパラメータは、メソッド内で宣言したローカル変数は、ローカル変数テーブルがあります。ローカル変数は、スロットの束、あなたはデータ(バイト、文字、短い...というように、同様の参照)を置​​くことができるスロットがあるでしょう。割出しスロットで使用されるローカル変数の仮想マシンデータのリスト(スロット0参考例は、デジタル3に対応し得る、参照スロット2、オブジェクト参照に対応していてもよいです)

オペランドスタック

オペランドスタックは、(すなわち、異なる領域のいくつかの部分のスタックフレームに、前記スタックとして使用する領域、すなわち、オペランドスタックである)スタックのスタックフレームです。(いくつかの命令は、スタックを操作し、スタックを計算するためのモード)には、主に計算の中間結果、並びに一時記憶変数演算処理を保持するために使用されます。

フレームデータ

データの上記スタックフレームに加えて、定数プール分析をサポートするために必要ないくつかのデータ、メソッド戻り、例外処理。例えば、我々は、これらのフレームデータ領域を配置する必要が例外処理、記憶テーブルは、JVMはここ領域に格納されたデータのいくつかのレベルを達成することができる場合、値が格納されて戻りました。

スタックに割り当て

これは、基本的な考え方は、オブジェクトがスタックに割り当て破られるために、他のスレッドがアクセスすることができないということで、最適化された技術です。たとえば、私たちはこの方法で一時オブジェクトを作成し、受信機は、ローカルオブジェクト参照変数、オブジェクトや他の方法です。そして、オブジェクトが脱出を起こらなかっただろう、それがスタック的に割り当てることができます。利点は、オブジェクトを直接リサイクルされるときに、スタックフレームが回収される(スタック空間が小さいので、小さなオブジェクトにのみ割り当てることができます)。

元空間パラメータ

-XX:MaxMetaspaceSize = 10メートル

  • JVMは、メタスペースのサイズが10Mで用いて発現しました
  • そのようなクラス、メソッド、定数プール、などのフィールドとしてクラスに格納された要素の空間情報、
  • メモリ素子空間はヒープメモリの外に属します。サイズを指定しない場合、java8のデフォルトはドルの制限を設定されていない、それは必要なときに、システムメモリが不足するまで成長します。
  • (情報クラスがここでロードされるので員一部スペース消費が存在することになるので、動的プロキシフレームワークやプログラムを必要とする)より大きな次元の空間は、システムは、より多くのクラスをロードすることができます

GCパラメータ

-XX:+ PrintGC

  • GCに直面したときGC印刷情報は、GC JVMは、図のように、情報を印刷します。
  • あなたはGCの情報を入手したら、我々はより簡単にGCを使用すると、効果中に監視されています

-XX:+ PrintGCDetails

  • 詳細情報GC、より詳細で豊富なGC情報を印刷します。これは、JVMが終了すると、ヒープの印刷内容の前になります。
  • PSYoungGenは、地域からのエデン+の若い世代を表し、
  • ParOldGenは歳を表し
  • space 65536K, 2% used [0x000000076ab00000,0x000000076acb4e98,0x000000076eb00000) 3桁が上限、現在の上限、メモリの下限を示しています。

-XX:+ PrintHeapAtGC

  • GC、印刷のすべての詳細ヒープ後のたびに、これは、より詳細な上に詳細を超えています。

-XX:+ PrintGCTimeStamps

  • 印刷時間当たりのGCログ、だけでなく、出力時間情報(システムが起動するまでの時間)。

-XX:+ PrintGCApplicationConcurrentTime

  • アプリケーションの印刷実行時間(到着時間セキュリティポイントセーフポイントの)は、一般的に以下のパラメータと組み合わせて使用​​されています

-XX:+ PrintGCApplicationStoppedTime

  • GC休止時間(STWメカニズム)ので、印刷アプリケーション

-XX:+ PrintReferenceGC

  • GCに関連するプリント参照。このソフト、弱参照参照システム内で追跡され得る、および参考文献は、仮想キューをFinallize。

-Xloggc:ログ/ gc.log

  • デフォルトのGCログをコンソール(標準出力)に直接出力され、このパラメータは、我々がここで指定した場所に出力することができることで、現在のディレクトリのログディレクトリ内のファイルgc.logを言うことです。

クラス情報パラメータ

-verbose:クラス或-XX:+ TraceClassLoading与-XX:+ TraceClassUnloading

  • クラスのロードとアンロードを追跡しているパラメータのこれらの2つのタイプは、同等です
  • -verbose:クラスのロードとアンロードトラッククラス
  • -XX:+ TraceClassLoadingトレースクラスのロード
  • -XX:+ TraceClassUnloading追跡クラスのアンロード

-XX:+ PrintClassHistogram

  • これは、クラスで印刷し、視聴情報配信システムを可能に
  • このパラメータをオンにすると、Javaコンソールを押すとCtrl + Break、コンソールは、現在のクラス情報のヒストグラムを表示します。以下は、現在の最大の空間クラス、インスタンス番号、およびその他のスペースを示してい

システム自体、関連するパラメータをパラメータ

-XX:+ PrintFlagsFinal

  • すべてのシステム・パラメータを印刷

-XX:+ PrintCommandLineFlags

  • 仮想マシンが起動されたときに暗黙的および明示的なパラメータに送信された印刷が、仮想マシンの暗黙的なコマンドラインのパラメータが与えられないことがあり、それが自己集合であってもよいです。

ヒープ領域のパラメータ

-Xms10m -Xmx20m

  • 最小ヒープメモリ10メートル
  • 最大ヒープメモリ20メートル
  • 多くの生産プロジェクトは、最大メモリを指示するために、同じ大きな、すべてのセットに直接設定されています。そのような開始は、最大メモリ使用量で、性能を向上し、メモリコピーを防止GCの数を減らす(拡張時のメモリが発生すること)

-Xmn3m

  • 設定した新世代の大きさは3メートルであります
  • 典型的には、ヒープ全体の1/3の大きさに設定1/4

-XX:SurvivorRatio = 2

  • 彼/からエデン、新しい世代を表し(エデン/へ)比は2であります
  • 例えば、メモリ40メートルの新世代は、その後、エデンゾーンは、すべての10メートルからとする、20Mであります

-XX:NewRatio = 3

  • 比率は年に3の古い/新しい世代を表し、
  • たとえば、ヒープメモリの合計が40メートル、10メートルので、新世代の、30メートルの歳

ヒープオーバーフロー処理パラメータ

-XX:+ HeapDumpOnOutOfMemoryError

  • ときにメモリオーバーフロー、エクスポート情報のヒープ全体

-XX:HeapDumpPath = D:/a.dump

  • メモリがオーバーフローした場合、情報のヒープは、このファイルにエクスポートされます。と上記のパラメータを使用します
  • ダンプ・ファイルをエクスポートした後、あなたはMATを分析するためのツールを使用することができます

-XX:OnOutOfMemoryError = D:/tools/printstack.bat

  • メモリ・オーバーフロー時にスクリプトの実装
  • 一般的に使用され、アラーム、通知、またはCore分析のためのメモリスレッドダンプファイルをダンプ

ダイレクトメモリパラメータ

-XX:MaxDirectMemorySize = 100メートル

  • これは、最大のダイレクト・メモリ・100メートルであります
  • デフォルト値は同じで、最大ヒープメモリです

おすすめ

転載: juejin.im/post/5d898610518825090f4199e1