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 クラウドのアップグレードを加速

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

推薦する

minivps 1Gメモリ 4コア 月額7ドル データセンター3つ(オプション)

minivps は英国の VPS 販売業者であり、XAVVO のサブブランドです。Xavvo Ltd...

SEO: 統計の誤読と誤解を招く

数日前にも述べたように、SEO は技術ではなく、技術だけではない、という思いが強くなってきています。...

Kafka のアーキテクチャと動作原理の図解

[[438966]] 1. Kafkaを理解するインタビュアーが質問しました: Kafka とは何で...

ゲームがセキュリティ保護を通過するのは実際には難しくありません。 ! !

1. 需要背景周知のとおり、2016年11月7日、全国人民代表大会常務委員会は「中華人民共和国サイバ...

gigsgigscloud: 米国 VPS、トリプルネットワーク CN2 GIA、月額 4.99 ドル、500g トラフィック、500Mbps 帯域幅

gigsgigscloud の CLOUDLET V シリーズ VPS (米国西海岸ロサンゼルス、ト...

星を選んでください! Mobvistaが「2021 Cloud Native Pioneer Award」を受賞

クラウド コンピューティングの時代を迎えるにつれ、クラウドに移行し、大きな進歩を遂げる企業がますます...

Baidu求人ランキング原則

SEO とは何ですか? 検索エンジン最適化です。一般的に使用される検索エンジンには、Baidu、Go...

テクノロジークラウドレポート:危機的状況を乗り越え、クラウドネイティブERPが新たな勢力として台頭

科学技術クラウドからのオリジナルレポート。 1990 年代にガートナーが ERP コンセプトを提唱し...

ストレージ仮想化技術の実装方法

ストレージ仮想化の最も一般的な理解は、ストレージ ハードウェア リソースを抽象化することです。仮想化...

収益が予想を上回る:SAP が 2020 年第 4 四半期および年間財務報告書を発表。 RISE with SAPで顧客のクラウドビジネス変革を加速

最近、SAP は 2020 年の第 4 四半期および年間財務報告を発表したほか、今四半期に中華圏で締...

情報管理システムをクラウド プラットフォームと SaaS に移行する理由は何ですか?

今日、情報管理市場は根本的な変化を遂げています。顧客関係管理 (CRM) スイートなどのエンタープラ...

interserver: 安価なストレージサービスを提供し、OwnCloudのインストールをサポートし、月額3ドルから利用可能

アメリカの老舗ホスティングブランドであるInterserverは、今年9月に写真や動画などを保存でき...

天津のウェブサイト構築会社は、低コストのウェブサイト構築を選択すると大きな損失を被ることが多い

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

クラウドビデオ会議 |人気の背後にある技術革新

この記事はLeiphone.comから転載したものです。再印刷が必要な場合は、Leiphone.co...

#blackfriday# interserver - 登録料 1.99 ドル、月額 2.5 ドル、cpanel 無制限の Web サイト ホスティング

18年間の運営実績を持つアメリカの老舗ホスティング会社であるInterserverが、ブラックフライ...