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 例外をスローします。

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

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

推薦する

タオバオの発展軌道についての私の理解についての気軽な話

アリババの上場は数え切れないほどの憶測を呼び、その評価額は2000億ドルに達し、多くの人々を羨ましが...

収益を生み出すアイデアを育み、優れたビジネスモデルを創造する

誰もが美を愛するのなら、富を愛するのは才能のある人だけではないはずです。動物にも食料を蓄えたり、物を...

dreamhost-60% オフ/無制限のスペース + トラフィック/無料の com ドメイン名/SS 可能

10 年以上の歴史を持つアメリカの一流ホスティング会社 Dreamhost が、ランプ環境、無制限の...

m247: 安価なサーバー、大きな帯域幅と大きなトラフィック、ビデオ/ダウンロード/CDN などに適しています。

M247はM24Sevenグループに所属し、2000年に営業を開始しました。m247は200人以上の...

SEO最適化の前にウェブサイトをしっかり分析することが成功への第一歩です

SEOを理解していない人がよく言うのは、「SEOなんて簡単。外部リンクを貼って記事を毎日更新するだけ...

SEO基準を満たすウェブサイトのホームページのタイトルの書き方

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

専門家がサイトを最適化する際に注意すべき点を解説

コンテンツは王様、外部リンクは女王です。SEO に携わる人なら誰でもこのことを知っています。オンサイ...

Kubernetes ソースコード分析: リソースと API

この記事は、Kubernetes の基本原理をより深く理解するために、学習目的で Kubernete...

映画『パシフィック・リム』からマーケティングについて語る

映画「パシフィック・リム」からのマーケティングマーケティングと電話にはどのような関係があるのでしょう...

民間病院のWeiboマーケティングのやり方

インターネット マーケティングは常にソーシャル ネットワーキング プラットフォームと切り離せないもの...

なぜ Weibo は広告主にとって標準的な「必須」のマーケティング チャネルになりつつあるのでしょうか?

北京時間8月9日、 Weiboの株価は史上最高値に達し、時価総額は200億ドルを超えた。前四半期にユ...

ウクライナのホスティングプロバイダー - gmhost の紹介、VPS、サーバー、ホスティング

gmhost はウクライナの商人で、2009 年に設立されました。RIPE NCC および Micr...

HPA PaaS コミュニティが設立されました!

1. HPA PaaSとは注: HP APaaS には、ゼロ コード、ロー コード プラットフォーム...

シンプルだが重要な SEO の公式

SEO の範囲は広く、多くの要素が関係しています。数式で表現するのはそれほど簡単ではありません。数日...

ウェブサイトの重み配分と内部リンクの完璧な比率を実現する方法

ウェブマスターの皆さん、ウェブサイトの構造を最適化する際には、当然のことながらウェブサイトの重量を考...