JVMでの直接参照と記号参照

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/weixin_43719015/article/details/102770169
ロード、検証、準備、解析し、初期化、7つのステージを使用してアンインストール:JVMでは、クラスが含むメモリ、そのライフサイクル全体を、アンロードするまで、仮想マシンのメモリにロードされ始めます。分析フェーズでは、一定のプールで仮想マシンですへの直接参照に置き換えシンボリック参照プロセス。

シンボルの参照

1. シンボル参照(シンボリック参照):参照に記載されたシンボルの特定のセットへのシンボル参照、リテラルシンボルは、任意の形態であってもよく、限りターゲットを使用することができるように明確な目標とすることができます。例えば、それは、クラスファイル内の定数のCONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info他の種類に表示されます。シンボル参照は、目標が必ずしもメモリにロードされ参照されていない、仮想マシンのメモリレイアウトとは何の関係もありません。Javaでは、クラスは、Javaクラスファイルにコンパイルされます。Javaクラスが参照されるクラスの実際のアドレスを知らないコンパイル時には、あなただけの代わりにシンボリックリファレンスを使用することができます。例えばorg.simple.Peopleクラス参照org.simple.Languageクラス、クラスコンパイル時の人々は、実際のメモリアドレス言語クラスを知らないで、それだけで、もちろん、これはであると仮定すると(シンボルorg.simple.Languageを使用することができ、練習があります)CONSTANT_Class_infoと同様クラスが表現する定数アドレス言語で表されます。メモリ位置の様々な仮想マシンの実装は変更される場合がありますが、シンボリック参照のリテラル形式が明確にJava仮想マシン仕様クラスファイル形式で定義されているので、彼らは、シンボリック参照が同じで受け入れることができます。

直接参照

2.直接参照:
直接参照があってもよい
(1)ターゲットへの直接のポインタ(例えば、点「タイプ」[]クラスオブジェクト、クラス変数、参照を指示することができるクラスメソッドは、メソッド領域へのポインタである)
(2)の部分の相対的なシフト量(インスタンス変数に、例えば、点、オフセットへの直接参照は、メソッドの一例である)、
(3)特定の処理に間接的に位置決め
直接参照は、同じ仮想基準異なるシンボルに、仮想マシンおよび関連のレイアウトであります引用されたマシンインスタンス上で直接翻訳、一般的に同じではありません。あなたがその目標基準への直接参照を持っている場合は、メモリにロードされている必要があります。

おすすめ

転載: blog.csdn.net/weixin_43719015/article/details/102770169