ホームページ  >  記事  >  Java  >  Java オブジェクトの構成を紹介する

Java オブジェクトの構成を紹介する

王林
王林転載
2021-02-19 10:56:083215ブラウズ

Java オブジェクトの構成を紹介する

前書き:

いわゆるオブジェクトは、実際には Java クラスを通じて生成されたエンティティです。

例: 建物を建てる設計図は Java クラスであり、この設計図に従って構築された建物が表示され、実際に使用される既存の建物は、この設計図を使用して取得されるオブジェクトに相当します。

Java クラスは実際には抽象概念であり、オブジェクトはこの Java クラスの抽象概念を通じて具体化された特定の概念です。

HotSpot 仮想マシンでは、これは共通の仮想マシンです。オブジェクトの構成は、オブジェクト ヘッダー、インスタンス データ、および位置合わせパディングの 3 つの領域に分かれています。

オブジェクト ヘッダー

オブジェクト ヘッダーは 2 つの部分に分かれています: オブジェクト自身の実行時データ、型ポインター

オブジェクト自身の実行時データ (HashCode、lock など)ステータスフラグ、スレッドが保持するロック、偏ったスレッドID、偏ったタイムスタンプ、GC生成経過時間など。データのこの部分の長さは、32 ビットおよび 64 ビットの仮想マシンではそれぞれ 32 ビットと 64 ビットです (圧縮ポインターが有効になっていない場合)。この部分を「マークワード」と呼びます。

Mark Word は、狭いスペースにより多くの情報を保存できるように、固定されたデータ構造を持たないように設計されており、状態に応じて異なるデータを保存します。たとえば、32 ビットの場合、ストレージの内容は次のように変化します。

Java オブジェクトの構成を紹介する

# 型ポインター。これは、このオブジェクトのクラス メタデータへのポインターです。このポインタは、オブジェクトがどのクラスのインスタンスであるかを知るために使用されますが、すべての仮想マシン実装がクラスのメタデータを見つけるためにこれを使用するわけではありません。

HotSpot 仮想マシンと同様に、新しいオブジェクトには通常、オブジェクトへの参照が保存されることは誰もが知っています。この参照にはオブジェクト インスタンスのアドレスが保存されます。ただし、一部の仮想マシンの実装では、この参照にはオブジェクト インスタンスのアドレスが保存されます。 a オブジェクトのハンドル アドレス。オブジェクト インスタンス アドレスとオブジェクト タイプ アドレスが含まれます。

つまり、このタイプの仮想マシンにはハンドル プールがあります。ハンドル プールにはオブジェクトのインスタンス データ アドレスとクラス データ アドレスが保存されるため、このタイプの仮想マシンはクラス データを通じてオブジェクトを直接見つけることができます。ハンドル プール内のアドレス。どのクラスに属するかのインスタンスです。

(学習ビデオ共有: java ビデオ チュートリアル )

Java オブジェクトの構成を紹介する

オブジェクトが配列の場合、記録する場所が必要ですデータの長さ。

インスタンス データ

インスタンス データは、さまざまな種類のフィールドの内容を含む、オブジェクトが実際に格納されるデータ領域です。

アライメント パディング

この部分には他の意味はなく、単にプレースホルダーとして機能します。主な理由は、HotSpot 仮想マシンのメモリ管理ではオブジェクトのサイズが 8 バイトである必要があるためです。整数倍であり、オブジェクト ヘッダーは正確に 8 バイトの整数倍ですが、インスタンス データは必ずしも整数倍である必要はないため、整列して埋める必要があります。

著者: Yes のレベリング ガイド
リンク: https://juejin.cn/post/6844903827427033096
ソース: Nuggets

関連する推奨事項:javaインタビューの質問そして答え#

以上がJava オブジェクトの構成を紹介するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。