Java 仮想マシンは複数のスレッドの同時実行をサポートでき、各 Java 仮想マシン スレッドには独自の pc レジスタがあります。いつでも、Java 仮想マシン スレッドは 1 つのメソッドのコードのみを実行します。スレッドによって実行されているメソッドは、スレッドの現在のメソッドと呼ばれます。 このメソッドがネイティブでない場合、pc レジスタには、Java 仮想マシンによって実行されているバイトコード命令のアドレスが格納されます。メソッドがネイティブの場合、pc レジスタの値は未定義になります。 pc レジスタの容量は、少なくとも returnAddress 型のデータまたはプラットフォームに依存するローカル ポインター値を格納できる必要があります。 Java 仮想マシン スタック 各 Java 仮想マシン スレッドには独自のプライベート Java 仮想マシン スタックがあり、これはスレッドと同時に作成され、スタック フレームを格納するために使用されます。 Java 仮想マシン スタックは、ローカル変数と計算されていない結果の一部を保存するために使用されます。さらに、メソッドの呼び出しと戻りにおいても重要な役割を果たします。 Java 仮想マシン スタックは、スタック フレームのポップとプッシュ以外の要因の影響を受けないため、スタック フレームをヒープ内に割り当てることができ、Java 仮想マシン スタックが使用するメモリが連続していることを保証する必要がありません。 Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーに仮想マシン スタックの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できる Java 仮想マシン スタックの場合、最大容量と最小容量を調整する手段を提供する必要があります。 Java 仮想マシン スタックでは次の例外が発生する可能性があります。
Javaヒープ Java 仮想マシンでは、ヒープはすべてのスレッドで共有できる実行時メモリ領域であり、すべてのクラスインスタンスと配列オブジェクトにメモリが割り当てられる領域でもあります。 Java ヒープは仮想マシンの起動時に作成されます。自動管理システム (ガベージ コレクターとも呼ばれます) によって管理されるさまざまなオブジェクトを格納します。これらの管理対象オブジェクトは明示的に破棄する必要はなく、破棄することもできません。仮想マシンの実装者は、システムの実際のニーズに基づいて自動メモリ管理テクノロジを選択できます。 Java ヒープの容量は固定することも、プログラムの実行時に動的に拡張することもでき、また、必要なスペースが多すぎる場合は自動的に縮小することもできます。 Java ヒープによって使用されるメモリが連続していることを保証する必要はありません。 Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーに Java ヒープの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できる Java ヒープの場合、最大容量と最小容量を調整する必要があります。 Java ヒープでは次の例外が発生する可能性があります。
方法領域 Java 仮想マシンでは、メソッド領域はすべてのスレッドで共有できるランタイム メモリ領域です。メソッド領域は、従来の言語のコンパイルされたコード保存領域や、オペレーティング システム プロセスのテキスト セグメントと非常によく似ています。実行時定数プール、フィールドとメソッドのデータ、コンストラクタと通常のメソッドのバイトコードの内容など、各クラスの構造情報を格納します。また、クラス、インスタンス、およびインターフェースの初期化で使用されるいくつかの特殊なメソッドも含まれます。 メソッド領域は、仮想マシンの起動時に作成されます。メソッド領域はヒープ内の論理コンポーネントですが、単純な仮想マシン実装では、この領域にガベージ コレクションと圧縮を実装しないことも選択できます。メソッド領域の容量は固定することも、プログラムの実行時に動的に拡張することもでき、また、必要なスペースが多すぎる場合は自動的に縮小することもできます。メソッド領域は実際のメモリ空間では連続していない可能性があります。 Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーにメソッド領域の初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できるメソッド領域の場合、実装では最大容量と最小容量を調整する手段を提供する必要があります。 メソッド領域では次の例外が発生する可能性があります。
ランタイム定数プール ランタイム定数プールは、クラス ファイル内の各クラスまたはインターフェイスの定数プール テーブルのランタイム表現です。これには、コンパイル時に認識される数値リテラルから、実行時に解決する必要があるメソッドまたはフィールド参照まで、さまざまな種類の定数が含まれます。ランタイム定数プールは従来の言語のシンボル テーブルに似ていますが、格納されるデータの範囲は通常の意味でのシンボル テーブルよりも広くなります。 各ランタイム定数プールは、Java 仮想マシンのメソッド領域に割り当てられます。クラスとインターフェースを仮想マシンにロードすると、対応するランタイム定数プールが作成されます。 クラスとインターフェースのランタイム定数プールを作成するときに、次の例外が発生する可能性があります。
ネイティブメソッドスタック Java 仮想マシンの実装では、ネイティブ メソッドの実行をサポートするために従来のスタックが使用される場合があります。このスタックはローカル メソッド スタックです。 Java 仮想マシンが別の言語を使用して命令セットインタープリターを実装する場合は、ネイティブメソッドスタックも使用できます。 Java 仮想マシンがネイティブ メソッドをサポートしていない場合、または従来のスタックに依存していない場合は、ネイティブ メソッド スタックが提供されない可能性があります。ネイティブ メソッド スタックがサポートされている場合、このスタックは通常、スレッドの作成時にスレッドごとに割り当てられます。 Java 仮想マシン仕様では、ネイティブ メソッド スタックを固定サイズとして実装したり、計算に基づいて動的に拡大および縮小したりすることができます。固定サイズのネイティブ メソッド スタックを使用する場合、スタックの作成時に各スレッドのネイティブ メソッド スタック容量を個別に選択できます。 Java 仮想マシンの実装では、プログラマーまたはエンド ユーザーにネイティブ メソッド スタックの初期容量を調整する手段を提供する必要があります。動的に拡張および縮小できるメソッド領域の場合、実装では最大容量と最小容量を調整する手段を提供する必要があります。 ローカル メソッド スタックでは次の例外が発生する可能性があります。
|
<<: アリババクラウド社長胡暁明:何百万人もの開発者とともにクラウドコンピューティングの未来を定義する
>>: 通信ベンダーがクラウド コンピューティングの発展を迅速に追跡する必要があるのはなぜですか?
frontrangehosting は設立から 2 年未満の VPS 事業者です。VPS のパフォー...
[51CTO.com クイック翻訳] Kubernetes は Docker のサポートを廃止しまし...
IoT にエッジ コンピューティングを実装すると、データ センターやクラウドと長距離にわたってデータ...
オリジナルのウェブサイト コンテンツは、疑似オリジナルまたは直接コピーされたコンテンツよりも確実に優...
18vps.com の Fa 氏は個人的に、鎮江電信に 2 台のキャビネットがあり、1 年以上運用さ...
多くの学生は、独自のブログを構築したいと考えていますが、技術的な知識が不足していることや、スペースや...
最近、いくつかのフォーラムで「デュアルアイテム タオバオ アフィリエイト」という用語を目にするように...
現在、O2Oコンセプトは非常に人気があります。同時に、一部のローカルウェブサイトはこの好機を捉え、こ...
ルールがなければ秩序は生まれません。この発言はまさに正しいです。私たちは何をするにも根拠を持たなけれ...
Linode の公式フォーラムから衝撃的なニュースが出てきました。Linode は KVM 仮想 V...
7月30日、O2O電子商取引の傑庫.comのCEOである潘秋慧氏がすべての投資を取り上げ、従業員全員...
ウェブサイトの外部リンクに関して言えば、SEO担当者やウェブマスターが他のウェブサイトにアクセスして...
スケーラビリティ、柔軟性、セキュリティを求めて、企業はワークロードをデータセンターからクラウド コン...
文/劉 燕 写真/袁建民ゲーム業界には、毎年開発される何千ものゲームのうち、収益を生み出すことができ...
UltraVPS (ドメイン名は .com ではなく .eu) は Bradler & Kr...