オブジェクトを作成するためのメモリとメモリオーバーフロー例外のJavaの面積、

ランタイムデータ領域

ここに画像を挿入説明

プログラムカウンタ(プログラムカウンタレジスタ)

小さなメモリ空間は、次のように見ることができます現在のスレッドインジケータ行番号によって実行されるバイトコード仮想マシンの概念モデルでは、この作業のバイトコードインタプリタは、命令を実行すべき次のバイトコードを選択するために、カウンタの値を変更する分岐、ループ、分岐、例外処理、および他の基本的な機能により、スレッド回復していることです完全にカウンターに依存する必要があります。
"スレッドプライベート「:各スレッドが原因で決定される任意の時点で、順番に切り替えてスレッドによるプロセッサの実行時間の配分を達成するためであるマルチスレッドのJava仮想マシンに別のプログラムカウンタを持って、プロセッサは意志。命令実行スレッドは
、Javaメソッドが実行されている場合、カウンタは、実行中の仮想マシンのバイトコード命令のアドレスを記録し、そしてネイティブメソッド場合、カウンタの値がヌルである
プログラムカウンタでありますJVMのOutOfMemoryErrorの状況は、領域のみを提供していません。

スタックのJava仮想マシン(Java仮想マシンスタック)

スレッドプライベート、ライフサイクルと同じスレッド。
ローカル変数テーブル情報が格納されているため行いながら各メソッドは、スタックフレームを作成し、オペランドスタック、動的リンク、方法輸出を仮想マシンスタックのJavaメモリモデルはメソッドが実行記載されています。
ローカル変数テーブルはコンパイラで知られている様々なタイプの基本的なデータを記憶し、オブジェクト参照のタイプ(参照型は、それがオブジェクト自体と等価ではない、開始アドレスへのオブジェクト・ポインタを参照することができ、それはオブジェクトを表す点であってもよいですハンドルまたは他のこの位置に関連付けられているオブジェクト)とRETURNADDRESS型(バイトコード命令のアドレスポインティング)。
スタックフレームを対応する各プロセスの実行方法は、スタックからスタックを処理するために、仮想マシン内のスタックです。
メソッドを入力するときにフレームに割り当てられたローカル変数は完全にローカル変数テーブルのサイズを変更しないであろう方法の実施中に決定されるため、この方法は多くのスペースを必要とします。
異常の二種類
1は、仮想マシンで許可された深さよりもスレッド要求スタックの深さより大きい場合、StackOverflowError例外がスローされます。
2.仮想マシンを動的に拡張を適用するのに十分なメモリ、スタックを展開することができない場合は、OutOfMemoryErrorがスローされます。
例:再帰参照互いに、2つのエンティティクラス。

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

仮想スタックマシンと同様の効果が、相違点:ネイティブメソッドサービスへの仮想マシン用のJava仮想マシンプロセス(バイトコード)サービス、ネイティブメソッドスタックを実行するためのステーションのための仮想マシン。
注:ネイティブメソッドは、非コールインタフェースのJavaのJavaコードです。

Javaの堆(Javaヒープ)

によって管理されているヒープのJava Java仮想マシンメモリの最大の作品
Javaヒープがすべてですスレッドシェア仮想マシンが起動したときに作成されたメモリ領域。唯一の目的は、オブジェクト・インスタンスを格納することです、Java仮想マシン仕様説明:すべてのオブジェクトインスタンスと配列ヒープ上に割り当てられます。変更を送信するには、スカラー最適化技術を交換するJITコンパイラの開発と成熟エスケープ分析、スタック上の分布は、ヒープ上に割り当てられたすべてのオブジェクトには、絶対的ではありません。
Javaガベージコレクタヒープ管理ヒープは、としても知られている主要領域である「GCヒープ。」メモリの回復の観点から、Javaスタックは、さらにに分ける:古いものと新しい世代の、そして慎重サバイバーへのサバイバースペースとスペースから、空間にエデン メモリ割り当ての観点から、スレッドがJavaヒーププライベート複数のスレッドに分割することができる共有バッファ(TLAB)を割り当てます。
何のメモリヒープは、インスタンスが完全に割り当てられていない場合は、ヒープを拡張することはできません、それはOutOfMemoryErrorがスローされます。

メソッド領域(方式エリア)

スレッドシェア地域、クラス情報ストレージが仮想マシンにロードされている、定数は、静的変数は、タイムコンパイラは、コードやその他のデータをコンパイルします。(同等でないパーマネント世代の本質と呼びます)

ランタイム定数プール(実行時定数プール)

様々なシンボルを保存するために、コンパイラによって生成され、リテラルの参照は、実行時定数プールに直接翻訳引用クラスがロードされた後に保存されています。
配置することができる新たな一定の動作中に動的に、Stringクラスの例えばインターン()メソッドを含んでいます。

ダイレクトメモリ(ダイレクト・メモリ)

ていない仮想マシンの実行時データ領域の一部、またそれは仕様で定義された仮想マシンのメモリ領域であり、また、OutOfMemoryErrorが発生することがあります。

オブジェクト、レイアウトおよびアクセスの作成

オブジェクトの作成

唯一の新しいキーワードでオブジェクトを作成し、仮想マシンのプロセスは次のように:
1、このコマンドのパラメータは、クラスのシンボル参照の定数プールで見つけて、クラスは、ロードされ解析され、初期化されているかどうかをチェックするかどうかを最初にチェックを。
図2に示すように、無負荷だけでなく、対応するクラスローディングプロセスの最初の実装が存在しない場合。
3、新しいオブジェクトの割り当てのための仮想マシンのメモリ。
オブジェクトインスタンスのフィールドを確保するために割り当てられたメモリ空間のメモリ割り当ての完了は、ゼロ値に初期化した後でも4は、Javaコードで初期値を直接使用することができる割り当てられなくてもよいです。
図5は、オブジェクトは、プログラマの要望に応じて初期化され、メソッドの実装が続きます。

================================================== =======
新生児オブジェクトの仮想マシンのメモリを割り当てるには二つの方法である:
選択割当:Javaヒープ構造、順番に、ガベージコレクタによって用いられるかどうかは、仕上げ機能を持つ圧縮するか否かを判断します。
(1)ポインタ衝突
メモリを割り当てるときに、Javaヒープメモリが構成され、物体側にアイドルメモリへのポインタの距離に等しいサイズを移動させるステップと、
(2)フリーリスト
の使用可能なメモリのJavaヒープメモリは、通常ではない、録画一覧れます、オブジェクト・インスタンスに割り当てられた十分な大きさのスペースを記録し、配信時間に見られるリストからリストを更新します。

================================================== =======
スレッドの安全性の問題:同時場合、メモリ割り当てが発生することが目的ではなく、ポインタを変更するのに十分な時間、オブジェクトB元ポインタを使用している間。次のように解決策がある:
(1)同期:アトミック更新操作を保証するためにロックします。
(2)ローカルスレッド割り当てキャッシュ(TLAB):メモリ割り当て動作は、Javaで、異なる空間分割スレッドに応じて、各スレッドの事前に割り当てられたヒープメモリを行います。

メモリレイアウトオブジェクト

オブジェクトの構造:オブジェクトヘッダ(ヘッダ)、インスタンスデータ(インスタンスデータ)、配向パディング(パディング)。
(1)オブジェクトヘッダ
A)ランタイムデータを格納自体(マークワード)オブジェクト:ハッシュコード(ハッシュコード)、GC世代年齢ロック状態フラグスレッドは、スレッドIDバイアス、バイアスタイムスタンプをロックを保持しています。
B)タイプのポインタ:そのクラス・オブジェクトへのポインタは、仮想マシンは、オブジェクト・クラスのインスタンスであるポインタによって決定され、メタデータです。
データの(2)実施例
の仮想マシンおよびJavaソースコードで定義されたフィールドの順序に影響を与える逐次、受け取った割り当てストラテジパラメータを格納A)。
b)のフィールドと同じ幅は常に一緒に割り当てられています。
c)の親クラスで定義された変数は、サブクラスの前に表示されます。
(3)配向パディング
A)プレースホルダ効果。
理由:HotSpot VMのアドレスを開始するオブジェクトは、8ビットの倍数でなければならないことを要求し、オブジェクトのサイズが8ビットの倍数でなければなりません。

オブジェクトの位置をアクセスします

(1)は、ハンドルの使用
の利点を安定した基準は、インスタンスデータへのハンドルのポインタにのみ変化するときに、オブジェクトが移動すると、ハンドラ・アドレスに記憶されていると、基準自体は変更する必要はありません。
ここに画像を挿入説明
(2)直接ポインタの
利点:ポインタを保存する速度は、時間のオーバーヘッドに配置されます。
ここに画像を挿入説明

公開された18元の記事 ウォンの賞賛0 ビュー425

おすすめ

転載: blog.csdn.net/qq_33805483/article/details/104105100