re: java里頭居然還有SoftReference、WeakReference 和 PhantomReference
2010-01-22 14:07 |
Java引用對象SoftReference WeakReference PhantomReference(二)2008-04-12 13:28四、Java對引用的分類
級別
什么時候被垃圾回收
用途
生存時間
強
從來不會
對象的一般狀態
JVM停止運行時終止
軟
在內存不足時
對象簡單?緩存
內存不足時終止
弱
在垃圾回收時
對象緩存
gc運行后終止
假象
Unknown
Unknown
Unknown
1、強引用:
public static void main(String[] args) {
MyDate date = new MyDate();
System.gc();
}
解釋:即使顯式調用了垃圾回收,但是用于date是強引用,date沒有被回收
2、軟引用:
public static void main(String[] args) {
SoftReference ref = new SoftReference(new MyDate());
drainMemory(); // 讓軟引用工作
}
解釋:在內存不足時,軟引用被終止,等同于:
MyDate date = new MyDate();
//-------------------由JVM決定運行-----------------
If(JVM.內存不足()) {
date = null;
System.gc();
}
//-------------------------------------------------------------
3、弱引用:
public static void main(String[] args) {
WeakReference ref = new WeakReference(new MyDate());
System.gc(); // 讓弱引用工作
}
解釋:在JVM垃圾回收運行時,弱引用被終止,等同于:
MyDate date = new MyDate();
//------------------垃圾回收運行------------------
public void WeakSystem.gc() {
date = null;
System.gc();
}
4、假象引用:
public static void main(String[] args) {
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(new MyDate(), queue);
System.gc(); // 讓假象引用工作
}
回復 更多評論