re: java里頭居然還有SoftReference、WeakReference 和 PhantomReference
2010-01-22 14:07 |
Java引用對(duì)象SoftReference WeakReference PhantomReference(二)2008-04-12 13:28四、Java對(duì)引用的分類(lèi)
級(jí)別
什么時(shí)候被垃圾回收
用途
生存時(shí)間
強(qiáng)
從來(lái)不會(huì)
對(duì)象的一般狀態(tài)
JVM停止運(yùn)行時(shí)終止
軟
在內(nèi)存不足時(shí)
對(duì)象簡(jiǎn)單?緩存
內(nèi)存不足時(shí)終止
弱
在垃圾回收時(shí)
對(duì)象緩存
gc運(yùn)行后終止
假象
Unknown
Unknown
Unknown
1、強(qiáng)引用:
public static void main(String[] args) {
MyDate date = new MyDate();
System.gc();
}
解釋?zhuān)杭词癸@式調(diào)用了垃圾回收,但是用于date是強(qiáng)引用,date沒(méi)有被回收
2、軟引用:
public static void main(String[] args) {
SoftReference ref = new SoftReference(new MyDate());
drainMemory(); // 讓軟引用工作
}
解釋?zhuān)涸趦?nèi)存不足時(shí),軟引用被終止,等同于:
MyDate date = new MyDate();
//-------------------由JVM決定運(yùn)行-----------------
If(JVM.內(nèi)存不足()) {
date = null;
System.gc();
}
//-------------------------------------------------------------
3、弱引用:
public static void main(String[] args) {
WeakReference ref = new WeakReference(new MyDate());
System.gc(); // 讓弱引用工作
}
解釋?zhuān)涸贘VM垃圾回收運(yùn)行時(shí),弱引用被終止,等同于:
MyDate date = new MyDate();
//------------------垃圾回收運(yùn)行------------------
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(); // 讓假象引用工作
}
回復(fù) 更多評(píng)論