Java 仮想マシン (JVM) は Java エコシステムの中核であり、Java コードを実行するための必須ツールをすべて提供します。その仕組みを完全に理解するには、このインタープリターのライフサイクルと、Java アプリケーションのパフォーマンスと最適化に対するその影響を理解することが重要です。
JVM ライフサイクル全体は、実行環境全体を構築して準備する役割を担う「JVM ブートストラップ」と呼ばれる基本的なプロセスから始まります。このコンテキストでは、コマンド ラインで渡された引数が解釈され、JVM コードがメモリに割り当てられ、JVM の内部データ構造が初期化され、メモリ管理が開始され、最後にメイン アプリケーション スレッドが動作を開始します。この段落で説明されている各サブプロセスを個別に調べてみましょう:
コマンドラインで渡された引数は解釈されます
プログラムがコマンド ライン経由で開始されると、JVM は指定された引数の分析を担当する一連のプロセスを開始します。これには、最小サイズと最大ヒープを定義する -Xms および -Xmx などの初期化パラメータが含まれる場合があります。アプリケーションのコンテキストでのオブジェクトの割り当てと作成を担当するメモリ領域。ガベージ コレクター サイクル自体のデバッグ仕様や構成も含まれます。
先に進む前に、重要な点を述べておきます。簡単にするために、高度な JVM 引数 (-XX で始まる引数) の解析を扱うコードのセグメントを分析します。
より明確にするために、さらなる参考のために OpenJDK のオープンソース コードを使用します。ディレクトリ src/hotspot/share/runtime.arguments.cpp にあるファイル arguments.cpp では、CLI によって高度なパラメータ (-XX) を解釈する関数は次のとおりです。 &&&]
簡単に分析すると、関数は渡された引数が または - で始まるかどうかのチェックを開始し、フラグがブール値であるかどうか、また非アクティブ化する必要があるかアクティブ化する必要があるかを判断します。その後、コードはフラグ名の抽出を開始します。各文字を解析し、英数字または_以外の場合は終了(フラグ名が完成)します。
チェックを実行してフラグ名を特定した後、最後にメソッド
JVMFlag* flag = find_jvm_flag(name, name_len); が呼び出され、提供された内容に利用可能な設定があるかどうかが確認されます。
これは、-XX の最も高度な引数がどのように解析されるかを簡単にまとめたものです。ただし、これから説明する同じファイル内で、別の解析関数を通過する、-X で始まる引数プロセスを見つけることができます。
フラグの例: -XMS
記事は作成中
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3