参照のJAVA 4種類
Javaオブジェクトの参照が含まれます:
- 強い参照
- ソフト参照
- 弱参照
- 偽の引用
Javaは、2つの主な目的を有する基準の4種類が用意されています。
最初は、プログラマがコードを介して特定のオブジェクトのライフサイクルを決定することを可能にすることである。
第二は、JVMのガベージコレクションの賛成です。
1.強い参照が
オブジェクトを作成し、オブジェクト変数への参照を割り当てることを意味します。
例:
オブジェクトオブジェクト=新しい新しいオブジェクト();
文字列strの=「ハッハッハ」;
強い参照がガベージコレクトされることはありません、JVMではなく、このオブジェクトが参照変数のポイントを持って回復しないのOutOfMemoryエラーをスローしていました。
2.ソフト参照
ソフト参照が備わっていますJVMのメモリ空間がいっぱいの場合、ガベージコレクタは、ソフト参照変数を再利用しないことです。
()メソッドは、Javaオブジェクトの回復を取得コレクタの前にJavaオブジェクトを返す、SoftReferenceクラスが強い参照を提供します。また、ゴミのリサイクルスレッドのJavaオブジェクトと、get()メソッドはnullを返します。
栗の場合:
BinarySearch BinarySearch新しい新しいBS =(); //バイナリ検索
bs.find(テスト、0、test.length - 1 ,. 5);
SoftReference <BinarySearch> SoftReference新しい新しい= <BinarySearch>(BS)をruanYinYong;
BS = NULL;
ruanYinYong.get()(テスト、0、test.lengthを- 1 ,. 5)検索;. //も強いヌルを指すだけでなく、ソフト参照を使用し続けることができます。
それに関連付けられている同じ時間への強い参照がある場合は、オブジェクトがガベージコレクションであるとき、それは回復できません。(あまりにも弱い参照)
3.弱参照
弱い参照<ピープル>リファレンス新しい新しい弱い参照= <ピープル>(新新ピープル( "zhouqian"、20がある));
System.out.printlnは(reference.get());
にSystem.gc( ); //ガベージコレクションのリソースを通知
するSystem.out.println(reference.get());
第一の出力、第二出力をヌル
参照4.バーチャル
JavaのPhantomReferenceは、仮想基準を表すために使用されます。同様に関連付けられたオブジェクトへの参照が存在しないのと同様に、オブジェクトが仮想基準に関連付けられている場合、その後、任意の時点でJVMがオフに回収することができました。仮想基準を単独で使用することはできません、それは参照キューと一緒に使用する必要があります。
ガベージコレクタと仮想オブジェクトを参照に関連付けられて発見された場合には、回収前に、この基準は、基準仮想キューに追加されるであろう。プログラムが参照できるかどうかを決定することは、それによって動作を行う、参照されたオブジェクトが回復するかどうかを確認するために、仮想キュー参照に追加されています。
ReferenceQueue <文字列>キュー=新しいReferenceQueue <>();
PhantomReference <文字列> STR =新しいPhantomReference <文字列>( "CHX"、キュー)。
System.out.println(str.get())。
ソフト参照により組み込ま使用してコールバック関数
輸入java.lang.ref.SoftReference。
パブリッククラスCallBackMain {
SoftReference <CallBackTest> ruanYinYong =新しいSoftReference <CallBackTest>(新しいCallBackTest())。
パブリック静的無効メイン(文字列[] args){
新しいCallBackMain()startCallBack()。
}
空startCallBackのパブリック(){
System.out.printlnは( "私は何かを行う");
ruanYinYong.get()コールバック();.
}
}
CallBackTest {クラス
のpublic static int型= B. 1;
公共ボイドコールバック(){
System.out.printlnは( "私は、コールバック関数である"は、B +);
}
}