JVM メモリ構造 上の図から、 JVM のメモリ空間が 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)がなくなりました。ただし、クラス メタデータはまだ存在しますが、連続したヒープ スペースに保存されるのではなく、「メタスペース」と呼ばれるネイティブ メモリに移動されます。 メソッド領域または不滅生成関連の設定
JVM スタック これは 、Java メソッド実行のメモリ モデルについて説明します。 メソッドが実行されるたびに、 ローカル変数テーブル (パラメーターを含む)、操作スタック、メソッド終了、およびその他の情報を格納するための「スタック フレーム」が作成されます。各メソッドが呼び出されてから実行されるまでのプロセスは 、スタック フレームが仮想マシン スタックにプッシュされ、そこからポップされるプロセスに対応します。 ネイティブスタック ネイティブ メソッド スタックが果たす役割は、仮想マシン スタックの役割と非常に似ています。唯一の違いは、仮想マシン スタックは仮想マシンに Java メソッド (つまり、バイトコード) の実行を提供するのに対し、 ネイティブ メソッド スタックは仮想マシンが使用するネイティブ メソッドを提供するという点です。 プログラムカウンタ(PCレジスタ) プログラム カウンターは、現在のスレッドが実行しているバイトコード ファイルの行番号を識別するインジケーターです。マルチスレッドの場合、各スレッドには独自の独立したプログラム カウンターがあるため、この領域は非スレッド共有メモリ領域になります。 Java メソッドが実行されると、カウンターにはバイトコード ファイルの行番号が格納されます。ネイティブ メソッドが実行されると、カウンターの値は空になります。 直接記憶 ダイレクト メモリは仮想マシン メモリの一部ではなく、Java 仮想マシン仕様で定義されているメモリ領域でもありません。 jdk1.4 で新しく追加された NIO は、チャネルとバッファの IO メソッドを導入します。ネイティブ メソッドを呼び出して、オフヒープ メモリを直接割り当てることができます。このオフヒープ メモリはネイティブ メモリであり、ヒープ メモリのサイズには影響しません。 JVM メモリパラメータ設定
一般的な JVM パラメータ構成リファレンス:
-Xmx3550m: JVM の最大使用可能メモリを 3550M に設定します。 -Xms3550m: JVM が 3550m のメモリを使用するように設定します。この値を -Xmx と同じに設定すると、各ガベージ コレクション後に JVM がメモリを再割り当てするのを防ぐことができます。 -Xmn2g: 若い世代のサイズを 2G に設定します。ヒープ全体のサイズ = 若い世代のサイズ + 古い世代のサイズ + 永続的な世代のサイズ。永久世代は通常 64M に固定されているため、若い世代を増やすと古い世代のサイズが減ります。この値はシステム パフォーマンスに大きな影響を与えるため、公式に推奨される構成はヒープ全体の 3/8 です。 -Xss128k: 各スレッドのスタック サイズを設定します。 JDK5.0 以降では、各スレッドのスタック サイズは 1M になり、それ以前は各スレッドのスタック サイズは 256K でした。アプリケーションのスレッド要件に基づいてメモリ サイズを調整します。同じ物理メモリの場合、この値を減らすと、より多くのスレッドが生成されます。ただし、オペレーティング システムではプロセス内のスレッド数に制限があり、これを即座に生成することはできません。経験値は3000~5000くらいです。 |
<<: マイクロソフトはオープンソースを全面的にサポートし、Visual Studio と Azure DevOps クラウドのアップグレードを加速
>>: エッジコンピューティング+クラウドコンピューティング、モノのインターネット実現の鍵
新規にオープンしたタオバオストアが直面する最大の課題は、トラフィックがない、知名度がない、顧客基盤が...
1. 需要背景周知のとおり、2016年11月7日、全国人民代表大会常務委員会は「中華人民共和国サイバ...
2012年10月、百度ウェブマスタープラットフォームは「ハイパーリンク不正行為に関するアルゴリズムの...
bgpto は、Double Eleven イベント期間中、「独立サーバー」の特別プロモーションを実...
低価格 VPS 業界の屠殺業者である virmach は、すでに低価格戦略を展開している中で、今月、...
近年最も人気があったテレビ番組は、ほかでもない「真歓伝」です。テレビ画面からインターネットに広がり、...
外部リンクは、オンラインプロモーションにおける強力な魔法の武器の 1 つと考えられています。強力な外...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています現在、携帯...
現在、インターネット上には数え切れないほどのウェブサイトがあります。趣味のために個人のウェブサイトを...
[[229662]]接続性、コラボレーション、共有、インテリジェンスを中核特性とするエンタープライズ...
cloudcone は、ロサンゼルス DC1 データセンター、KVM 仮想化、エンタープライズ レベ...
これまでの「8」回の記事では、「シナリオ主導のアプローチ」を使用して、Kafka「ログシステム」のソ...
分散アーキテクチャとクラウドネイティブは、どちらも現在のテクノロジー分野で注目されているトピックです...
VDI ユーザー エクスペリエンスの問題AMDのGPU SRIOVやNvidiaのM60などの直接デ...
中国商人である六易雲インターネットは、国内外のVPS、独立サーバー、CDN、DDoS高防御などの事業...