Java仮想マシン - 2.3のHotSpot仮想マシンオブジェクト

 

オブジェクトの作成

ステップ1クラスローディング検査

彼らは新しい命令を発見すると、確認してください。

  1. 命令のパラメータは、クラスの定数プールを参照してシンボルを見つけることができるかどうか。
  2. クラスを代表してこのシンボリック参照し、チェックはすでに、ロードされ解析され、初期化されています。ない場合は、適切なクラスのロード処理を実行する必要があります。

 

ステップ2は、新しいオブジェクトにメモリを割り当てています

クラスのロードが完了した後のオブジェクトに必要なメモリサイズが完全に確立することができます。分布の二つの方法、意思決定するかどうか、通常のJavaヒープの分布の選択があります。そして、通常のJavaヒープおよび圧縮の有無にかかわらず、ガベージコレクタによって使用されるが、機能を整理することにしましたか。

2つの配布:

  1. ポインタの衝突(ポインタをバンプ):構造化メモリ
  2. フリーリスト(フリー・リスト):メモリの凹凸

 

セキュリティスレッドを確保するためにメモリを割り当てる方法をステップ3

二つのオプション:

  1. すべてのメモリ割り当て操作は同期させます。(推奨しません)
  2. 各スレッドは、事前に小さなJavaヒープメモリが割り当てられ、ローカルキャッシュに割り当てられたスレッドを(、TLABをローカル割り当てバッファスレッド)と呼ばれます。各スレッドは、最初の同期せずに、内部TLABにこの操作をメモリを割り当てます。TLABがなくなると新しいTLABを割り当てた場合にのみ、唯一のロック同期させる必要があります。パラメータを設定するために+/- UseTLAB:TLAB、-XXによってを使用して仮想マシン。

 

ステップ4は、ゼロ値に初期化

仮想マシンのメモリに割り当てられているが(オブジェクトヘッダを含まない)がゼロ値に初期化されます。あなたがTLABを使用していた場合は、このステップはTLABを事前に割り当てることができます。

これは、オブジェクトのインスタンスフィールドは初期値を直接使用することができ割り当てられないことを保証します。

 

オブジェクトヘッダを設定する必要STEP5

たとえば、このオブジェクトは、メタデータ、ハッシュコードオブジェクト、GC世代年齢及びバイアスロックを有効にするか否かを検索する方法のようなクラスのインスタンスであり、...

 

 

ステップ6を行った<init>メソッド

すべての値は、<初期化>実行前にゼロの値です。新しい命令の実装後は、その後、プログラマーとして、<INIT>オブジェクトの初期化を実行します。

 

おすすめ

転載: www.cnblogs.com/frankcui/p/10969248.html