public class SoftRefrenceDemo2 {
public static void main(String[] args) {
String abc=new String("abc"); //1
SoftReference<String> abcSoftRef=new SoftReference<String>(abc); //2
WeakReference<String> abcWeakRef = new WeakReference<String>(abc); //3
abc=null; //4 只有将对象设置为null,才可以创建软引用对象
abcSoftRef.clear();//5
}
}下面是创建软用的demo:public class SoftRefrenceDemo {
public static void main(String[] args) {// 是否可以创建一个软引用对象A?
A obj = new A();
SoftReference<A> sf = new SoftReference<A>(obj);
// obj = null;// 2、只有将obj设置为null才可以实现软引用对象的创建 ?
if(sf!=null) {
obj = sf.get();
} else {
obj = new A();
sf = new SoftReference<A>(obj);
}
}
}
class A {
}3、浏览器实现后退功能:当按浏览器上的后退键时是从缓存中取出数据还是重新构建呢?看下面两种实现策略及问题public class SoftRefrenceDemo3 {// js里面有一个goBack()?
public static void main(String[] args) {
Browser prev = new Browser(); // 获取页面进行浏览
SoftReference<Browser> sr = new SoftReference<Browser>(prev); // 浏览完毕后置为软引用
if (sr != null) {
prev = (Browser) sr.get(); // 还没有被回收器回收,直接获取
} else {
prev = new Browser(); // 由于内存吃紧,所以对软引用的对象回收了
sr = new SoftReference<Browser>(prev); // 重新构建
}
}
}
class Browser {
}三、弱引用的demopublic class WeakRefrenceDemo {
// 当GC遇到弱可及的对象时,会及时回收该对象
public static void main(String[] args) {
String abc=new String("abc");
WeakReference<String> abcWeakRef = new WeakReference<String>(abc);
abc=null;
System.out.println("before gc: "+abcWeakRef.get());
System.gc();
System.out.println("after gc: "+abcWeakRef.get());
}
}原文地址:http://blog.csdn.net/u010213127/article/details/45113145