首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java的弱引述(Weak Reference)

2012-10-09 
Java的弱引用(Weak Reference)??之前一直没有接触过弱引用这个概念,今天看到以后觉得挺新鲜,就查了查资料

Java的弱引用(Weak Reference)

?

?之前一直没有接触过弱引用这个概念,今天看到以后觉得挺新鲜,就查了查资料总结一下,希望对大家有所帮助。
?要理解弱引用,首先要先了解一下强引用(Strong Reference),? 其实我之前也并不了解强引用,虽然天天都在用。举例来说:

A obj = new A(); WeakReference wr = new WeakReference(obj); obj = null; //等待一段时间,obj对象就会被垃圾回收      ...   if (wr.get()==null) {         System.out.println("obj 已经被清除了 ");         } else {      System.out.println("obj 尚未被清除,其信息是 "+obj.toString());      } ?



  不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。

?在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。

  这类的技巧,在设计 Optimizer 或 Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。

  
?? ?java.lang.ref.SoftReference

 Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference 指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得 Soft Reference 也适合拿来实作 pooling 的技巧。
?? ?A obj = new A();
?? ?
?? ??? SoftRefenrence sr = new SoftReference(obj);
? 引用时

if(sr!=null){        obj = sr.get();    }else{        obj = new A();        sr = new SoftReference(obj);    }
?

热点排行