ご存知のとおり、Java はオブジェクト指向言語です。では、オブジェクトには何がメモリ内に含まれますか? まず第一に、ほとんどのオブジェクトはヒープに格納されます。 (エスケープ を除く)。
ヒープ内のオブジェクト ストレージは主に 3 つの部分に分割されます。
オブジェクト ヘッダー、オブジェクト インスタンス データ、アライメント補足 (配列は配列の長さがもう 1 つあります)
オブジェクト ヘッダー:
マーク ワード: ハッシュコードとロックを格納しますオブジェクトの情報(ロックアップグレード)、または世代経過やGCフラグなどの情報
Type pointer: オブジェクトが属するクラスへのポインタを格納します(class file#) ## in メタデータ)、JVM はこのオブジェクトがどのクラスに属するかを決定します。
オブジェクト インスタンス データ:
によって生成されたオブジェクト情報new は、親クラスの属性情報を含む、クラスの属性データ情報を格納します。アライメントの補足
配列オブジェクトには複数のデータが格納されます。アライメントJVM にはオブジェクトの占有が必要です。スペースはメモリ割り当てを容易にするために 8 の倍数でなければなりません (最小単位としてバイト単位で割り当てられます)。そのため、この部分は、番号。
handle と direct が含まれますポインタ
ハンドル:
メモリの一部は、ハンドル プールとして Java ヒープと、そこに格納されるオブジェクトに分割されます。スタック内の参照 ハンドル アドレス。ハンドルには、オブジェクト インスタンス データとデータ型の特定のアドレス情報が含まれます。ダイレクト ポインタ:
java ヒープ オブジェクトのメモリレイアウトはデータ型の関連情報へのアクセスを防ぐ方法を考慮する必要があり、参照に格納されるのはオブジェクトのアドレスです。であるかどうかを確認します。ロードおよび検証済み、準備 (クラス内のすべての静的変数にメモリ領域を割り当て、それらの初期値を設定します )、解析および初期化 。
以上がJavaオブジェクトストレージのメモリレイアウト方式とはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。