JVM メモリ モデルの詳細な説明と JVM パラメータの詳細な構成

JVM メモリ モデルの詳細な説明と JVM パラメータの詳細な構成

JVM メモリ構造

上の図から、 JVM のメモリ空間が 3 つの部分に分かれていることが明確にわかります。

  1. ヒープメモリ
  2. 方法領域
  3. スタックメモリ

スタック メモリは、さらにJava 仮想マシン スタックとローカル メソッド スタックに分けられます。ヒープメモリは、新しい世代と古い世代に分けられます。新世代はさらに、エデン領域、From Survivor 領域、To Survivor 領域に分けられます。

1 つの部分は、Java ヒープとメソッド領域を含むスレッド間で共有されます。残りの部分はスレッド専用で、仮想マシン スタック、ネイティブ メソッド スタック、プログラム カウンターなどのメモリの小さな部分が含まれます。

ヒープ

ほとんどのアプリケーションでは、Java ヒープは Java 仮想マシンによって管理される最大のメモリ ブロックです。 Java ヒープはすべてのスレッドで共有されるメモリ領域であり、仮想マシンの起動時に作成されます。

このメモリ領域の唯一の目的はオブジェクト インスタンスを格納することであり、ほぼすべてのオブジェクト インスタンスがここにメモリを割り当てます。

ヒープ メモリはすべてのスレッドで共有され、若い世代と古い世代の 2 つの部分に分けられます。

下図の Perm は *** 世代を表していますが、*** 世代はヒープメモリの一部ではなく、JDK 1.8 以降では *** 世代は削除されていることに注意してください。

新しい世代(Young)と古い世代(Old)の比率は1:2です(この値はパラメータ-XX:NewRatioで指定できます)

デフォルトでは、Eden: from: to = 8: 1: 1 (パラメーター –XX:SurvivorRatio で設定可能)、つまり、Eden = 新世代のスペース サイズの 8/10、from = to = 新世代のスペース サイズの 1/10 です。

方法領域

この方式領域は「 第一世代」とも呼ばれます。 仮想マシンによってロードされたクラス情報、定数、静的変数を格納するために使用されます。 すべてのスレッドで共有されるメモリ領域です。

JDK8 より前の HotSpot JVM では、これらの「新しい」ものが格納される領域は「永続世代」と呼ばれます。最初の世代は連続したヒープ空間です。 JVM を起動する前に、コマンド ラインでパラメータ -XX:MaxPermSize を設定して、第 1 世代に割り当てることができるメモリ領域を設定します。 デフォルトのサイズは 64M です(64 ビット JVM のデフォルトのサイズは 85M です)。

JDK8 の登場により、JVM には 第 1 世代 (PermGen)がなくなりました。ただし、クラス メタデータはまだ存在しますが、連続したヒープ スペースに保存されるのではなく、「メタスペース」と呼ばれるネイティブ メモリに移動されます。

メソッド領域または不滅生成関連の設定

  • -XX:PermSize=64MB 最小サイズ、初期割り当て
  • -XX:MaxPermSize=256MB *** 必要に応じて割り当てられる割り当てサイズを許可します
  • XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled ガベージコレクションを実行しないように設定します
  • デフォルトサイズ
  • -serverオプションのデフォルトのMaxPermSizeは64mです。
  • -clientオプションのデフォルトのMaxPermSizeは32mです。

JVM スタック

これは 、Java メソッド実行のメモリ モデルについて説明します。 メソッドが実行されるたびに、 ローカル変数テーブル (パラメーターを含む)、操作スタック、メソッド終了、およびその他の情報を格納するための「スタック フレーム」が作成されます。各メソッドが呼び出されてから実行されるまでのプロセスは 、スタック フレームが仮想マシン スタックにプッシュされ、そこからポップされるプロセスに対応します

ネイティブスタック

ネイティブ メソッド スタックが果たす役割は、仮想マシン スタックの役割と非常に似ています。唯一の違いは、仮想マシン スタックは仮想マシンに Java メソッド (つまり、バイトコード) の実行を提供するのに対し、 ネイティブ メソッド スタックは仮想マシンが使用するネイティブ メソッドを提供するという点です。

プログラムカウンタ(PCレジスタ)

プログラム カウンターは、現在のスレッドが実行しているバイトコード ファイルの行番号を識別するインジケーターです。マルチスレッドの場合、各スレッドには独自の独立したプログラム カウンターがあるため、この領域は非スレッド共有メモリ領域になります。

Java メソッドが実行されると、カウンターにはバイトコード ファイルの行番号が格納されます。ネイティブ メソッドが実行されると、カウンターの値は空になります。

直接記憶

ダイレクト メモリは仮想マシン メモリの一部ではなく、Java 仮想マシン仕様で定義されているメモリ領域でもありません。 jdk1.4 で新しく追加された NIO は、チャネルとバッファの IO メソッドを導入します。ネイティブ メソッドを呼び出して、オフヒープ メモリを直接割り当てることができます。このオフヒープ メモリはネイティブ メモリであり、ヒープ メモリのサイズには影響しません。

JVM メモリパラメータ設定

  • -Xms は最小ヒープ サイズを設定します。
  • -Xmx はヒープ領域の最大サイズを設定します。
  • -Xmn: 若い世代のサイズを設定する
  • -XX:NewSize は、新しい世代のスペースの最小サイズを設定します。
  • -XX:MaxNewSize は、新しい世代のスペースのサイズを設定します。
  • -XX:PermSize は、第 1 世代のスペースの最小サイズを設定します。
  • -XX:MaxPermSize は生成スペースのサイズを設定します。
  • -Xssは各スレッドのスタックサイズを設定します
  • -XX:+UseParallelGC: ガベージ コレクターを並列コレクターとして選択します。この構成は若い世代にのみ有効です。つまり、上記の構成では、若い世代は並行コレクションを使用し、古い世代は引き続きシリアルコレクションを使用します。
  • -XX:ParallelGCThreads=20: 並列コレクターのスレッド数、つまり同時にガベージ コレクションを実行するスレッドの数を構成します。この値はプロセッサの数と同じになるように構成されます。

一般的な JVM パラメータ構成リファレンス:

  • java-Xmx3550m-Xms3550m-Xmn2g-Xss128k
  • -XX:並列GCスレッド=20
  • -XX:+ConcMarkSweepGC を使用-XX:+ParNewGC を使用

-Xmx3550m: JVM の最大使用可能メモリを 3550M に設定します。

-Xms3550m: JVM が 3550m のメモリを使用するように設定します。この値を -Xmx と同じに設定すると、各ガベージ コレクション後に JVM がメモリを再割り当てするのを防ぐことができます。

-Xmn2g: 若い世代のサイズを 2G に設定します。ヒープ全体のサイズ = 若い世代のサイズ + 古い世代のサイズ + 永続的な世代のサイズ。永久世代は通常 64M に固定されているため、若い世代を増やすと古い世代のサイズが減ります。この値はシステム パフォーマンスに大きな影響を与えるため、公式に推奨される構成はヒープ全体の 3/8 です。

-Xss128k: 各スレッドのスタック サイズを設定します。 JDK5.0 以降では、各スレッドのスタック サイズは 1M になり、それ以前は各スレッドのスタック サイズは 256K でした。アプリケーションのスレッド要件に基づいてメモリ サイズを調整します。同じ物理メモリの場合、この値を減らすと、より多くのスレッドが生成されます。ただし、オペレーティング システムではプロセス内のスレッド数に制限があり、これを即座に生成することはできません。経験値は3000~5000くらいです。

<<:  マイクロソフトはオープンソースを全面的にサポートし、Visual Studio と Azure DevOps クラウドのアップグレードを加速

>>:  エッジコンピューティング+クラウドコンピューティング、モノのインターネット実現の鍵

推薦する

機密情報産業は新たな段階へ:WeChatでのビジネス

1. 公式Weiboプロモーションの背後にある闇の食物連鎖これは「メディア」の混沌とし​​た時代であ...

王童:パーソナルブランドを構築する過程で、具体的な理論を作り、コンテンツをどのようにアウトプットしていくのでしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスショッピングモール内の店...

SEO プロジェクトを実行する際によくある 8 つの間違い

1. プロジェクトの目的が明確でないSEO プロジェクトの初期段階では、SEO はマーケティング戦略...

中小企業にとって、適切なクラウドを利用することが重要である。

中小企業がクラウドコンピューティングを採用する理由は何でしょうか?中小企業にとってクラウドサービスで...

スマートトラベルは「次のステップ」を迎えており、ファーウェイクラウドは西村で業界リーダーと議論している

中国の自動運転市場が年々熱を帯び、産業政策の支援が継続的に増加し、インフラ建設が継続的に改善され、新...

Duomao Interactiveはインターネットの光を照らし、企業の効率的なマーケティングを支援します

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています今日、イン...

SEO起業の条件や収益化のアイデアについて何を知っていますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO 最適化のテクニッ...

認定資格やリモートワークがクラ​​ウドコンピューティングの給与に与える影響

COVID-19 パンデミックにより、クラウド コンピューティング関連の職種の需要が急増しており、エ...

ユーザーのニーズを満たすプロセスの重要なポイントを特定する: プロダクトマネージャーが必ず読むべき 9 つのステップの方法

私はこの記事を世界を変えることを夢見る人々に捧げますシュ・シュン何年も経って、あの若いプロダクトマネ...

バックアップの推奨事項: crissic - 15 ドル/年/512 MB RAM/100 GB ハード ドライブ/2 TB トラフィック/ロサンゼルス

crissic.net のロサンゼルス データ センターである OVZ が、またプロモーションを行っ...

easyvmはどうですか?フロリダ州タンパの VPS のレビュー、TikTok/Netflix のブロック解除

Easyvm は、米国南東部のフロリダ州タンパで独自の VPS 事業を展開しています。比較的アジア人...

ネットワークマーケティングの価値

本当の価値は違いから生まれます。オンライン マーケティングと従来のマーケティングの理論的基礎は同じで...

個人ウェブマスター向けの新しいウェブサイトを最適化するためのヒント

インターネットは非常に速いペースで発展しており、個人のウェブサイトの成長率はさらに恐ろしいです。A5...

ウェブサイト分析 高度なセグメンテーション 神剣の六経

—— コンバージョンセグメンテーション変換とは何ですか?ウェブサイト分析のさまざまな複雑で絡み合った...