Javaオブジェクトとアクセス方法のメモリレイアウト

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

:ホットスポット仮想マシンで、メモリ内のオブジェクトのレイアウトは、3つの領域に分割することができるオブジェクトヘッダ、実施例及びデータ整列パディング。
ここに画像を挿入説明
ホットスポット仮想マシンオブジェクトヘッダ情報は、ランタイムデータを格納するための2つの部分、第1の部分を含むがそれ自体(ハッシュコード、GC世代年齢、ロックステータスフラグなど)オブジェクト、他の部分はポインタ型である、すなわち、それがオブジェクトを指しクラスメタデータ・ポインタ、仮想マシンは、このオブジェクトのポインタによって決定され、そのクラスのインスタンスです。

有効データ部分の例は、実際のターゲット情報に格納され、フィールドの内容の各種プログラムで定義されています。

アライメントパディング部分が唯一の役割を果たし占め、特別な意味はありません、存在してバインドされていません物体の前記ホットスポット仮想マシンのスタートアドレスの自動メモリ管理システムは、換言すれば、8バイトの整数倍でなければならないので、オブジェクトのサイズは、8バイトの整数倍でなければなりません。ヘッド部と対象物を正確に8バイトの倍数である(1倍または2倍)、およびオブジェクトインスタンスのデータ部分が整列されていない場合、したがって、それはパディングを整列させることによって完了する必要があります。

アクセス方法オブジェクト

それは私たちのJavaプログラムがスタック上の参照特定のデータによってヒープ上のオブジェクトを操作するには、オブジェクトを使用してオブジェクトを作成することです。オブジェクトへのアクセス方法は、2つの方法で、仮想マシン、現在主流のアクセスによって実現されてもよいです。

図1に示すように、ハンドルの使用
ハンドルをハンドルを使用する場合、Javaヒープメモリハンドラアドレスとしてプール・ハンドルに分割され、それは参照オブジェクトに格納され、ハンドルは、オブジェクトインスタンスのデータとその特定のデータタイプが含まれていますアドレス情報;
ここに画像を挿入説明
2、直接ポインタ
直接ポインタ:あなたはダイレクトアクセスポインタを使用する場合は、Javaヒープ内のオブジェクトのレイアウトは、データの種類を考慮しなければならない場所にどのように関連する情報にアクセスし、アドレスが保存され、直接オブジェクト参照です。
ここに画像を挿入説明

オブジェクトアクセスの2つの方法の比較

  • 利点ハンドルは
    最大の利点は、参照ハンドルに格納されているアクセスへのハンドルを使用して、基準自体は変更する必要はなく、オブジェクトが移動されたときに安定したアドレスは、ハンドルにのみインスタンスデータポインタを変更しています。

  • 直接ポインタ利点
    最大の利点に直接ポインタを使用して、それはポインタの時間オーバーヘッドが配置されている保存し、高速アクセスです。ホットスポットVMは、このポインタを使用することです。

公開された42元の記事 ウォン称賛11 ビュー3813

おすすめ

転載: blog.csdn.net/weixin_44584387/article/details/104649687