Java仮想マシンの構造: ランタイムデータ領域

Java仮想マシンの構造: ランタイムデータ領域

Java 仮想マシンは複数のスレッドの同時実行をサポートでき、各 Java 仮想マシン スレッドには独自の pc レジスタがあります。いつでも、Java 仮想マシン スレッドは 1 つのメソッドのコードのみを実行します。スレッドによって実行されているメソッドは、スレッドの現在のメソッドと呼ばれます。

このメソッドがネイティブでない場合、pc レジスタには、Java 仮想マシンによって実行されているバイトコード命令のアドレスが格納されます。メソッドがネイティブの場合、pc レジスタの値は未定義になります。 pc レジスタの容量は、少なくとも returnAddress 型のデータまたはプラットフォームに依存するローカル ポインター値を格納できる必要があります。

Java 仮想マシン スタック

各 Java 仮想マシン スレッドには独自のプライベート Java 仮想マシン スタックがあり、これはスレッドと同時に作成され、スタック フレームを格納するために使用されます。 Java 仮想マシン スタックは、ローカル変数と計算されていない結果の一部を保存するために使用されます。さらに、メソッドの呼び出しと戻りにおいても重要な役割を果たします。 Java 仮想マシン スタックは、スタック フレームのポップとプッシュ以外の要因の影響を受けないため、スタック フレームをヒープ内に割り当てることができ、Java 仮想マシン スタックが使用するメモリが連続していることを保証する必要がありません。

Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーに仮想マシン スタックの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できる Java 仮想マシン スタックの場合、最大容量と最小容量を調整する手段を提供する必要があります。

Java 仮想マシン スタックでは次の例外が発生する可能性があります。

  • スレッドによって要求されたスタック容量が Java 仮想マシン スタックで許可される最大容量を超える場合、Java 仮想マシンは StackOverflowError 例外をスローします。
  • Java 仮想マシン スタックが動的に拡張可能で、拡張しようとしたときにメモリが不足することが予想される場合、または新しいスレッドを作成するときに、対応する仮想マシン スタックを作成するために使用できるメモリが不足している場合、Java 仮想マシンは OutOfMemoryError 例外をスローします。

Javaヒープ

Java 仮想マシンでは、ヒープはすべてのスレッドで共有できる実行時メモリ領域であり、すべてのクラスインスタンスと配列オブジェクトにメモリが割り当てられる領域でもあります。

Java ヒープは仮想マシンの起動時に作成されます。自動管理システム (ガベージ コレクターとも呼ばれます) によって管理されるさまざまなオブジェクトを格納します。これらの管理対象オブジェクトは明示的に破棄する必要はなく、破棄することもできません。仮想マシンの実装者は、システムの実際のニーズに基づいて自動メモリ管理テクノロジを選択できます。 Java ヒープの容量は固定することも、プログラムの実行時に動的に拡張することもでき、また、必要なスペースが多すぎる場合は自動的に縮小することもできます。 Java ヒープによって使用されるメモリが連続していることを保証する必要はありません。

Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーに Java ヒープの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できる Java ヒープの場合、最大容量と最小容量を調整する必要があります。

Java ヒープでは次の例外が発生する可能性があります。

  • 実際に必要なヒープが自動メモリ管理システムが提供できる最大容量を超える場合、Java 仮想マシンは OutOfMemoryError 例外をスローします。

方法領域

Java 仮想マシンでは、メソッド領域はすべてのスレッドで共有できるランタイム メモリ領域です。メソッド領域は、従来の言語のコンパイルされたコード保存領域や、オペレーティング システム プロセスのテキスト セグメントと非常によく似ています。実行時定数プール、フィールドとメソッドのデータ、コンストラクタと通常のメソッドのバイトコードの内容など、各クラスの構造情報を格納します。また、クラス、インスタンス、およびインターフェースの初期化で使用されるいくつかの特殊なメソッドも含まれます。

メソッド領域は、仮想マシンの起動時に作成されます。メソッド領域はヒープ内の論理コンポーネントですが、単純な仮想マシン実装では、この領域にガベージ コレクションと圧縮を実装しないことも選択できます。メソッド領域の容量は固定することも、プログラムの実行時に動的に拡張することもでき、また、必要なスペースが多すぎる場合は自動的に縮小することもできます。メソッド領域は実際のメモリ空間では連続していない可能性があります。

Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーにメソッド領域の初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できるメソッド領域の場合、実装では最大容量と最小容量を調整する手段を提供する必要があります。

メソッド領域では次の例外が発生する可能性があります。

  • メソッド領域のメモリ空間がメモリ割り当て要求を満たすことができない場合、Java 仮想マシンは OutOfMemoryError 例外をスローします。

ランタイム定数プール

ランタイム定数プールは、クラス ファイル内の各クラスまたはインターフェイスの定数プール テーブルのランタイム表現です。これには、コンパイル時に認識される数値リテラルから、実行時に解決する必要があるメソッドまたはフィールド参照まで、さまざまな種類の定数が含まれます。ランタイム定数プールは従来の言語のシンボル テーブルに似ていますが、格納されるデータの範囲は通常の意味でのシンボル テーブルよりも広くなります。

各ランタイム定数プールは、Java 仮想マシンのメソッド領域に割り当てられます。クラスとインターフェースを仮想マシンにロードすると、対応するランタイム定数プールが作成されます。

クラスとインターフェースのランタイム定数プールを作成するときに、次の例外が発生する可能性があります。

  • クラスまたはインターフェースを作成するときに、ランタイム常時オン プールを構築するために必要なメモリ領域がメソッド領域が提供できる最大値を超えると、Java 仮想マシンは OutOfMemoryError 例外をスローします。

ネイティブメソッドスタック

Java 仮想マシンの実装では、ネイティブ メソッドの実行をサポートするために従来のスタックが使用される場合があります。このスタックはローカル メソッド スタックです。 Java 仮想マシンが別の言語を使用して命令セットインタープリターを実装する場合は、ネイティブメソッドスタックも使用できます。 Java 仮想マシンがネイティブ メソッドをサポートしていない場合、または従来のスタックに依存していない場合は、ネイティブ メソッド スタックが提供されない可能性があります。ネイティブ メソッド スタックがサポートされている場合、このスタックは通常、スレッドの作成時にスレッドごとに割り当てられます。

Java 仮想マシン仕様では、ネイティブ メソッド スタックを固定サイズとして実装したり、計算に基づいて動的に拡大および縮小したりすることができます。固定サイズのネイティブ メソッド スタックを使用する場合、スタックの作成時に各スレッドのネイティブ メソッド スタック容量を個別に選択できます。

Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーにネイティブ メソッド スタックの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できるメソッド領域の場合、実装では最大容量と最小容量を調整する手段を提供する必要があります。

ローカル メソッド スタックでは次の例外が発生する可能性があります。

  • スレッドによって要求されたスタック容量がネイティブ メソッド スタックで許可される最大容量を超える場合、Java 仮想マシンは StackOverflowError 例外をスローします。
  • ネイティブ メソッド スタックが動的に拡張可能で、拡張しようとしたときにメモリが不足することが予想される場合、または新しいスレッドの作成時に対応するネイティブ メソッド スタックを作成するために十分なメモリがない場合は、Java 仮想マシンは OutOfMemoryError 例外をスローします。

<<:  アリババクラウド社長胡暁明:何百万人もの開発者とともにクラウドコンピューティングの未来を定義する

>>:  通信ベンダーがクラウド コンピューティングの発展を迅速に追跡する必要があるのはなぜですか?

推薦する

推奨: frontrangehosting - コスト効率が高く安定した Windows KVM

frontrangehosting は設立から 2 年未満の VPS 事業者です。VPS のパフォー...

Ubuntu Server に Docker なしで Kubernetes をインストールするにはどうすればいいですか?

[51CTO.com クイック翻訳] Kubernetes は Docker のサポートを廃止しまし...

エッジコンピューティングでIoTデータに近づく

IoT にエッジ コンピューティングを実装すると、データ センターやクラウドと長距離にわたってデータ...

ユーザーエクスペリエンスと独創性: 250以上の非オリジナル記事が、高品質で安定したランキングを簡単にもたらします。

オリジナルのウェブサイト コンテンツは、疑似オリジナルまたは直接コピーされたコンテンツよりも確実に優...

限定プロモーション:鎮江電信10M無制限サーバー月額180元

18vps.com の Fa 氏は個人的に、鎮江電信に 2 台のキャビネットがあり、1 年以上運用さ...

Sina Cloud Store: テクノロジーがわからなくても独自のウェブサイトを持つことができます

多くの学生は、独自のブログを構築したいと考えていますが、技術的な知識が不足していることや、スペースや...

タオバオの二重商品顧客に関する簡単な説明

最近、いくつかのフォーラムで「デュアルアイテム タオバオ アフィリエイト」という用語を目にするように...

ローカルポータルが新たな機会をもたらす

現在、O2Oコンセプトは非常に人気があります。同時に、一部のローカルウェブサイトはこの好機を捉え、こ...

ブランドプロモーション+ユーザー集客+企画スタッフの旅行サイト開発「鉄のトライアングル」

ルールがなければ秩序は生まれません。この発言はまさに正しいです。私たちは何をするにも根拠を持たなけれ...

#ニュースLinode-KVM社内テストアプリケーション開始/Windowsは世界

Linode の公式フォーラムから衝撃的なニュースが出てきました。Linode は KVM 仮想 V...

Jieku.comのCEOが金を持ち逃げし、従業員全員を解雇したというネット上の噂は公式に否定された。

7月30日、O2O電子商取引の傑庫.comのCEOである潘秋慧氏がすべての投資を取り上げ、従業員全員...

高品質の外部リンクを獲得するためのリンクベイトの設定方法

ウェブサイトの外部リンクに関して言えば、SEO担当者やウェブマスターが他のウェブサイトにアクセスして...

クラウド コンピューティングとエッジ コンピューティングの違いと関連性は何ですか?

スケーラビリティ、柔軟性、セキュリティを求めて、企業はワークロードをデータセンターからクラウド コン...

Kaiying Network の Wang Yue: 草の根ウェブマスターのゲーム帝国

文/劉 燕 写真/袁建民ゲーム業界には、毎年開発される何千ものゲームのうち、収益を生み出すことができ...

推奨: ultravps - 2 ユーロ / Xen PV / 512m メモリ / 15g ハードディスク / 500g 帯域幅

UltraVPS (ドメイン名は .com ではなく .eu) は Bradler & Kr...