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(); // 让假象引用工作
}
回复 更多评论