「五分一日、JVM楽しい」:オブジェクトアクセスのポジショニング

序文

「オブジェクトのメモリレイアウト」1で、我々はオブジェクトヘッダと呼ばれる機能が含まれていることを学んだの型のポインタに何かを、そのオブジェクトは、そのクラスのメタデータへのポインタで、仮想マシンは、このオブジェクトがクラスのインスタンスであるポインタによって決定されます。ただし、すべての仮想マシンがそうするようにしています。ここまでの異なる仮想マシンが異なる実装を持って、現在の主流はに分けることができますハンドルの直接のポインタ

ハンドル

画像-20191028220400935

私たちは呼ばれ、私たちのスタックの単一部品のうち分け、図から見ることができますプールのハンドル我々はに位置してクエリにしたい、通過点として機能するプール・ハンドルをヒープメモリのデータがオブジェクトインスタンスによって必要とされます間接取得する指標、他の部分が向けられている間領域の方法オブジェクト型ポインタを。このとき、参照アドレスに格納されているJVMスタックフレームスタックローカル変数テーブルは、ハンドルに対応するオブジェクトのアドレスではなく、オブジェクト自体のアドレス。

ダイレクトアクセスポインタ

画像-20191028221331772

我々は、見ることができ、上図参照オブジェクトインスタンスのデータに直接のポインタであり、オブジェクト・インスタンス・データ(オブジェクトヘッダが)データのオブジェクトタイプにデータ・オブジェクト・ポインタのタイプを含むこと方式エリアです。

コントラスト

安定性から、我々はGCを持っていたとき、オブジェクトにインスタンスデータポインタが参照しながら、変更されますが、変更が発生しませんので、より良い場所にアクセスするためのハンドル。

そして〜少ない時間ポインタが頭上に配置され、そして我々はHotSpot仮想マシンを使用するこの方法は、オブジェクトの位置を特定するために使用されているので、すべての後、速度は王である、時間の観点、間違いなく優れたダイレクトアクセスポインタから考えて

いいえ公共ありません

おすすめ

転載: www.cnblogs.com/viyoung/p/12550134.html