Object obj = new Object();
2、軟引用(SoftReference)
Object obj = new Object(); //強引用
ReferenceQueue<Object> referenceQueuee = new ReferenceQueue<>(); //引用隊列
// 軟引用和引用隊列聯合使用,如果軟引用所引用的對象被垃圾回收器回收,JVM就會把這個軟引用加入到引用隊列中
SoftReference softReference = new SoftReference(str, referenceQueuee);
當內存不足時,等價於:
if(JVM.內存不足()){
obj = null;
System.gc();
}
3、弱引用(WeakReference)
@Test
public void testWeakReference() throws InterruptedException {
ReferenceQueue<Object> referenceQueuee = new ReferenceQueue<>();
Object weakObject = new Object();
//弱引用
WeakReference weakReference = new WeakReference(weakObject, referenceQueuee);
System.out.println("WeakReference:" + weakReference.get());
System.out.println("referenceQueuee:" + referenceQueuee.poll());
weakObject = null;
System.gc();
Thread.sleep(2000);
System.out.println("WeakReference:" + weakReference.get());
System.out.println("referenceQueuee:" + referenceQueuee.poll());
}
測試結果:
WeakReference:java.lang.Object@694f9431
referenceQueuee:null
WeakReference:null
referenceQueuee:java.lang.ref.WeakReference@f2a0b8e
4、虛引用(PhantomReference)
@Test
public void testPhantomReference() throws InterruptedException {
//虛引用:功能,不會影響到對象的生命週期的,
// 但是能讓程序員知道該對象什麼時候被 回收了
ReferenceQueue<Object> referenceQueuee = new ReferenceQueue<>();
Object phantomObject = new Object();
PhantomReference phantomReference = new PhantomReference(phantomObject,referenceQueuee);
phantomObject = null;
System.out.println("phantomObject:" + phantomObject);//null
System.out.println("phantomReference" + referenceQueuee.poll());//null
System.gc();
Thread.sleep(2000);
System.out.println("referenceQueuee:" + referenceQueuee.poll());
}
測試結果:
phantomObject:null
phantomReferencenull
referenceQueuee:java.lang.ref.PhantomReference@694f9431