これらの10の小さな実験に頼って、JVMの3つの主要なパラメータタイプを数秒で理解します。

これらの10の小さな実験に頼って、JVMの3つの主要なパラメータタイプを数秒で理解します。

[[343690]]

著者 |悟空兄弟

ソース | Wukong チャット アーキテクチャ (ID: PassJava666)

この実験の目的は、JVM パラメータの 3 つの主要なタイプを説明することです。 JVM チューニングで最もよく使用される XX パラメータは XX パラメータです。 JVM の XX パラメータの表示方法と設定方法もチューニングの基本的なスキルです。このセクションでは、実験的な方法で JVM パラメータを表示および設定する方法について説明します。皆さんがインスピレーションを得られることを願っています。

標準パラメータ

共通標準パラメータ

  • -version、JDKのバージョンを取得します
  • -助けて、助けを得る
  • -showverification、JDK バージョンとヘルプを取得

実践実験1 - 標準パラメータの表示

実験手順:

Java JDKのバージョンを確認する

  1. java バージョン

実験1-1

Java JDKのバージョンが1.8.0_131であることがわかります。

  • Javaヘルプドキュメントを表示
  1. java -ヘルプ

実験1-2

  • バージョンとヘルプドキュメントを表示
  1. java -バージョンを表示

実験1-3

Xパラメータ

Xパラメータの紹介

ご存知のとおり、一般的に使用されている javac は Java コードを Java クラス ファイルにコンパイルしますが、クラス ファイルを実行するにはどうすればよいでしょうか。ここでは、3 つの X パラメータを使用して、クラス ファイルが仮想マシンでどのように実行されるかを説明します。

  • -Xint: 直接的な解釈と実行
  • -Xcomp: 実行前にローカルコードにコンパイルする
  • -XMixed: 混合モード (コンパイルと解釈の両方)

ハンズオンラボ 2 - X パラメータの表示と設定

バージョンを表示

  1. java バージョン

WebIDE のコンソール ウィンドウで Java -version を実行すると、自分の環境で Java プログラムが混合モードで実行されていることがわかります。

実験2-1

  • コンパイルモードを解釈実行モードに変更する
  1. java -Xint -バージョン

WebIDEのコンソールウィンドウでコマンドを実行する

実験2-2

  • コンパイルモードをコンパイルのみモードに変更する
  1. java -Xcomp -バージョン

実験2-3

XX パラメータ

XXパラメータの紹介

XX パラメータには 2 つのタイプがあり、1 つはブール型、もう 1 つはキーと値のペア型です。

  • ブール型
    • 式: -XX:+ 特定の属性 または -XX:- 特定の属性 + は、この属性をオンにすることを意味し、- は、この属性をオフにすることを意味します。
    • 例: -XX:-PrintGCDetails、これはGC詳細出力をオフにすることを意味します
  • キー値型
    • 式: -XX: 属性キー = 属性値
    • 例: -XX:attributemetaspace=2000000 は、Java メタスペースの値を 2000000 に設定します。

ハンズオンラボ 3 - パラメータが有効になっているかどうかを確認する

この実験では主に以下の内容を説明します。実行中のJavaプログラムのPrintGCDetailsパラメータがオンになっているかどうかを確認する

  • 常時実行されるJavaプログラムを書く
  • アプリケーションのプロセスIDを表示する
  • プロセスのGCDetailパラメータが有効になっているかどうかを確認します

WebIDE メニューを右クリックし、「新規ファイル」を選択して新しいファイルを作成します。

新しいファイル

demoXXparam.javaという名前のファイルを作成します。

デモXXparam.java

WebIDEでdemoXXparam.javaを書く

  1. パブリッククラスdemoXXparam {
  2. 公共 静的void main(String[] args)はInterruptedExceptionをスローします{
  3. システム。 .println ( "hello XX params" );
  4. スレッド.スリープ(整数.MAX_VALUE);
  5. }
  6. }

WebIDEのコンソールウィンドウでdemoXXparam.javaコードをコンパイルします。

  1. javac デモXXparam.java

コードのコンパイル

コンパイル後、作成したdemoXXparamクラスのdemoXXparam.classバイトコードファイルが現在のフォルダに生成されます。

クラスファイルの作成

WebIDEでdemoXXparamコードを実行する

  1. java デモXXパラメータ

Javaプログラムの実行

出力:

  1. こんにちはXXパラメータ

WebIDEで新しいコンソールウィンドウを開く

ターミナル -> 新しいターミナル

新しいコンソールウィンドウを開く

実行中のすべてのJavaプログラムを表示します。-lはクラスファイルのパッケージ名を出力することを意味します。

  1. jps-l は

jps

demoXXparamプロセスのIDは518であることがわかりました。

demoXXparam プログラムで PrintGCDetails パラメータが有効になっているかどうかを確認します。

PrintGCDetails: ガベージコレクションが発生したときにメモリ回復ログを印刷し、プロセス終了時に各領域の現在のメモリ割り当て状態を出力します。

  1. jinfo -flag PrintGCDetails 518

ジンフォ

結果は次のとおりです。

  1. -XX:-PrintGC詳細

前述のように、- 記号はオフを意味するため、現在のデモ プログラムでは PrintGCDetails パラメータはオンになっていません。

ハンズオンラボ 4 - パラメータの有効化

  • WebIDE コンソールで demoXXparam プログラムを強制終了する
  1. Ctrl + C キー
  • 次に画面を掃除します
  1. クリア
  • 次に、パラメータ-XX:+PrintGCDetailsを指定してdemoXXparamプログラムを実行します。
  1. java -XX:+PrintGCDetails デモXXパラメータ

実験4

  • 出力:
  1. こんにちはXXパラメータ

demoXXparamプロセスのIDを表示する

プロセスID

demoXXparamのプロセスIDが1225であることがわかります。

demoXXparam PrintGCDetails の設定パラメータを表示する

新しいコンソール ウィンドウを開き、次のコマンドを実行して、プロセス 1225 の PrintGCDetails パラメータが有効になっているかどうかを確認します。

  1. jinfo -flag PrintGCDetails 1225

PrintGCDetails パラメータ

PrintGCDetails がオンになっていることがわかります。+ 記号はオンになっていることを示します。

ハンズオンラボ 5 - キー値型パラメータ値

メタスペースの価値を見る

  1. jinfo -flag メタスペースサイズ 526

メタスペースサイズ

このことから、メタスペースのサイズは 21M であると結論付けることができます。

メタスペースの値を128Mに設定する

  1. java -XX:MetaspaceSize=128m デモXXパラメータ

メタスペースのサイズを確認する

  1. jinfo -flag メタスペースサイズ 1062

メタスペースのサイズ変更

最も一般的な -Xms と -Xmx はどのようなパラメータですか?

  • -Xms パラメータは -XX:InitialHeapSize を表し、ヒープ メモリを初期化します (デフォルトでは、最大物理メモリの 64% のみが使用されます)
  • -Xmx: パラメータは -XX:MaxHeapSize、大きなヒープメモリを表します (デフォルトでは最大物理メモリの 1/4 のみが使用されます)

エイリアスがありますが、XX パラメータに属します。

ハンズオン ラボ 6 - -XX:InitialHeapSize と -XX:MaxHeapSize の値を設定します。

  1. java -XX:InitialHeapSize=200m デモXXパラメータ
  2. または
  3. java -Xms200m デモXXパラメータ

InitialHeapSize パラメータの値を確認します。この値は 200M です。

InitialHeapSize の設定

  1. java -XX:MaxHeapSize=200M デモXXパラメータ
  2. または
  3. java -Xmx200m デモXXパラメータ

MaxHeapSize パラメータの値を確認します。この値は 200M です。


MaxHeapSizeの設定

拡張機能: Javaプログラムに設定されているすべてのパラメータ値を表示する

  1. jinfo -flags <プロセスID>


マーク

  • デフォルト以外の VM フラグは、パラメータ タイプが JVM ネイティブ パラメータであることを意味します。
  • コマンドラインはユーザー定義パラメータを表す

XX構成項目の工場出荷時設定とカスタム設定を表示する方法ハンズオン実験

7 - 工場出荷時の設定ですべてのXX構成項目を表示する

  1. java -XX:+PrintFlagsInitial -バージョン


印刷フラグ初期値

ハンズオン実験 8 - JVM の現在の XX 構成項目をすべて表示する

  1. java -XX:+PrintFlagsFinal -バージョン


印刷フラグ最終

いくつかの重要な情報を確認できます:

  • [グローバル フラグ]: グローバル パラメーター。アプリケーションのパラメータをカスタマイズしても、グローバル パラメータは変更されません。

たとえば、以前は MetaspaceSize を 128m に変更しましたが、リストには依然として 21m が表示されます。


グローバルフラグ

  • :=: パラメータが変更されました。次の図に示すように、InitialHeapSize初期化ヒープメモリパラメータは264241152に変更されました。

要約すると:


工場出荷時設定とカスタムパラメータ設定

ハンズオンラボ 9 - プログラム実行時に XX 構成オプションを印刷する

  1. java -XX:+PrintFlagsFinal -XX:+InitialHeapSize=150M デモXXパラメータ

変更された値は157286400(150M)であることがわかります。

プログラム実行時にXX設定オプションを印刷する

ハンズオン ラボ 10 - JVM によって自動的に構成されるか、ユーザー (アプリケーションではない) によって手動で設定される XX オプションを表示します。

  1. java -XX:+PrintCommandLineFlags -バージョン

次のパラメータが印刷されます:


XX オプションは JVM によって自動的に設定されます

実験概要

この実験クラスでは、基本パラメータ、Xパラメータ、XXパラメータの表示方法とXXパラメータの設定方法を学びました。また、jps および jinfo ツールを活用してプロセスを表示し、パラメータを設定します。

JVM パフォーマンス チューニングについては、まだ語るべきことがたくさんあり、1 つの記事ですべてを網羅することはできません。主に小さな実験の形で、いくつかの記事に分けます。

この記事はWeChatの公開アカウント「Wukong Talks Architecture」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合はWukong Chat Architecture公式アカウントまでご連絡ください。

<<:  クラウドコンピューティングがアプリケーション開発に与える影響を探る

>>:  エッジインテリジェンス: この技術シフトが受け入れられつつある5つの理由

推薦する

SEOの真髄: 最新のBaiduアルゴリズムに遅れずについていく

中国最大の検索エンジンである百度検索エンジンは、ウェブサイトの開発において非常に重要な補助的な役割を...

ホスト評価は消えた?明らかに、いいえ!

最近、メール以外の連絡手段をすべて削除し、プライベートチャットやグループチャットへの参加もやめました...

B2CウェブサイトがSEOを利用してトラフィックを獲得する方法について簡単に説明します。

ご存知のとおり、B2C ウェブサイトは、フォーラムや情報ウェブサイトのように人気を集めて広告を販売し...

企業ウェブサイトの最新ナビゲーションマーク——SEO最適化

数十億のウェブサイトの中で、ユーザーがあなたのウェブサイトをすぐに見つけ、クリックし、閲覧し、取引を...

Antsle を使用して 5 分で仮想マシンをデプロイする方法は?

[51CTO.com クイック翻訳] Antsle (https://antsle.com/) は、...

クラウドのホワイトウォッシング VS クラウド ネイティブ、どうすればクラウドを賢く認識できるでしょうか?

マーケティング用語に惑わされないでください。クラウド インスタンス上で従来のインフラストラクチャを実...

ユーザーの購買行動を詳細に分析する6つの方法

大まかに言えば、ユーザーの購買行動は主に 6 つのタイプに分けられます。 1. 価格に基づいた購買行...

特別なサイトレイアウトを構築するにはどうすればいいですか?

私たちがやりたいサイト内レイアウトは、一般的に言われているサイト内内部リンクレイアウトではなく、別の...

検索エンジンをオープンにする「記事タイトル」

Baiduのアルゴリズムのアップグレードに伴い、多くのオリジナル記事が含まれなくなりました。なぜでし...

Kubernetes での高可用性アプリケーションのデプロイの実践

[[432705]]実際の運用アプリケーションでは複数のコンテナが必要になります。これらのコンテナは...

PacificRackはどうですか?現在20%割引で販売中のPacific Rackの簡単なレビューです。

2 月 5 日、Pacisicrack VPS は 80% 割引をリリースし、2GB メモリの年間支...

大規模エンタープライズクラウド移行における4つの重要な問題と解決策

著者 |尹大偉今日では、クラウド コンピューティングによって提供されるリソースとホスティング サービ...

Web アプリ: モバイル検索のトレンド?検討すべきビジネスモデル

モバイルインターネットは急速に発展し、モバイル検索は飛躍的に成長しているものの、業界関係者の中には、...

cloudsilk: 香港 VPS、500M 帯域幅、中国本土への直接接続、3 つのネットワーク CMI、20% 割引、年間 288 元から

Cloudsilk は、アウトバウンド ジャーニー用の BGP、バックホール用の香港 CMI ネット...

Kubernetesコンテナクラウドプラットフォーム構築実践

[51CTO.com からのオリジナル記事] Kubernetes は、自動デプロイメント、大規模な...