1. プログラム カウンタ (PC)
はスレッド専用です。これは、より小さなメモリであり、現在のスレッドによって実行されるバイトコードの行番号インジケータであり、Java 仮想マシン仕様で OOM (OutOfMemoryError) が指定されていない唯一の領域です。2. Java 仮想マシン スタック
# はスレッド専用です。ライフサイクルはスレッドと同じです。 Java メソッド実行のメモリ モデルです。各メソッドを実行すると、ローカル変数とオペランド(オブジェクト参照)を格納するスタック フレームが作成されます。ローカル変数に必要なメモリ空間はコンパイル中に割り当てられます。したがって、スタック フレームのサイズは変わりません。 2 つの例外があります: 1) スレッド リクエストの深さがスタックの深さよりも大きい場合、StackOverFlowError がスローされます。 2) スタックが動的に拡張するときに十分なメモリを要求できない場合、OOM がスローされます。3. ヒープ
Java ヒープはすべてのスレッドで共有されます。仮想マシンの起動時に作成されます。オブジェクトのインスタンスと配列が保存されます。最大のメモリが占有されています。新世代(ヤングエリア)と旧世代(オールドエリア)に分かれています。新世代はエデンエリアとサーバイアエリアに分かれる。 Servior エリアは From スペースエリアと To スペースエリアに分かれています。 Eden 領域と Servior 領域のメモリ比率は 8:1 です。拡張メモリが使用可能なメモリよりも大きい場合、OOM がスローされます。4. ローカル メソッド スタック
ローカル メソッド スタックはスレッド専用です。 Java 仮想マシン スタックに似ていますが、Java メソッド (バイトコード) を提供する代わりに、ネイティブの非 Java メソッドを提供します。 StackOverFlowError と OOM もスローされます。5. メソッド領域
メソッド領域はすべてのスレッドで共有されます。非ヒープとも呼ばれる、仮想マシンによってロードされたクラス情報、定数、静的変数、およびその他のデータを保存するために使用されます。メソッド領域は「永続世代」とも呼ばれ、GCが行われることはほとんどありませんが、再利用されないわけではありません。このエリアのリサイクルの目的は、主に定数プールのリサイクルとタイプのアンロードです。メモリ要求が実際に利用可能なメモリよりも大きい場合、OOM がスローされます。 Java 関連のおすすめ記事:以上がJVM のランタイム データ領域とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。