七、引用(reference)詳細

1523 ワード

引用とは?
referenceタイプのデータに格納されている数値が別のメモリの開始アドレスを表す場合、このメモリは参照を表しています.リファレンスはオブジェクト自体とは異なり、仮想マシンの種類によっては、オブジェクトの開始アドレスを指すリファレンスポインタであるか、オブジェクトを表すハンドルまたはオブジェクトに関連する他の場所を指す可能性があります.
参照される格納場所、長さ、構造
参照java仮想スタック内のスタックフレームに対応するローカル変数テーブルに格納され、ローカル変数テーブルの容量は (Variable Slot, Slot)単位である.仮想マシン仕様では、その長さは説明されておらず、このリファレンスがどのような構造を持っているかは明確に示されていませんが、一般的にはSlotごとにreferenceが格納されるはずです.一般的に、仮想マシン実装は、少なくともこの参照によって2つの点を達成しなければならない:1.このリファレンスからjavaスタック内のオブジェクトのデータ格納の開始アドレスインデックスを直接または間接的に検索します.2.この参照では、オブジェクトが属するデータ型がメソッド領域に格納されているタイプ情報を直接または間接的に検索します.
参照の分類
Javaでは、強い参照(Strong Reference)、ソフト参照(Soft Reference)、弱い参照(Weak Reference)、虚な参照(Phantom Reference)**の4種類に分けられ、この4種類の参照強度は順次弱まっていく.1.強引用とは、プログラムコードに普遍的に存在するObject obj = new Object()のような引用を指し、強引用が存在する限り、ゴミ収集器は参照されたオブジェクトを回収しない.2.ソフトリファレンスは、まだ役に立つが必要ではないオブジェクトを記述するために使用されます.ソフトリファレンスに関連付けられたオブジェクトについては、メモリオーバーフロー異常が発生する前に、これらのオブジェクトを回収範囲に列挙して2回目の回収を行います.今回の回収で十分なメモリがない場合、メモリオーバーフロー異常が放出されます.JDK 1.2の後、ソフトリファレンスを実現するためにSoftReferenceクラスが提供される.3.弱い参照は、非必須オブジェクトを記述するためにも使用されますが、その強度はソフト参照よりも弱く、弱い参照に関連付けられたオブジェクトは、次のゴミ収集が発生する前にしか生存できません.ゴミ収集器が動作すると、現在のメモリが十分であるかどうかにかかわらず、弱い参照のみで関連付けられたオブジェクトが回収されます.JDK 1.2の後、弱い参照を実現するためにWeakReferenceクラスが提供される.4.虚引用は幽霊引用または幻影引用とも呼ばれ、最も弱い引用関係である.1つのオブジェクトに虚参照が存在するかどうかは、生存時間に影響を与えることはなく、虚引用によってオブジェクトインスタンスを取得することもできません.オブジェクトに虚参照関連付けを設定する唯一の目的は、このオブジェクトがコレクタによって回収されたときにシステム通知を受け取ることです.JDK 1.2の後に、PhantomReferenceクラスが虚参照を実現するために提供される.