再看SoftReference和WeakReference

java中的SoftReference和WeakReference已经出来很久了,但是到现在为止开发的程序里几乎都没有直接用到它们。

用不到,那就说明还没有碰到需要用它们的场景,当然也有一个原因,就是不知道怎么用。

简单来说,java中的引用默认都是强引用,只要当引用存在(就是能从根引用遍历到),GC就不会回收。

有时候,我们无法自己决定还要不要用一个实例,可能需要根据情况决定,那么就有了SoftReference和WeakReference。

SoftReference:当jvm内存不够用的时候,由jvm决定是否回收

WeakReference:无条件回收。

对于SoftReference,我们很自然的就想到了一个应用,那就是cache,cache里的东西当然是存在的时间越长越好,但是毕竟有内存的限制,既然我们不知道什么时候内存不够用,那么就把控制权交个jvm,jvm觉得内存不够用了,那么就去清理一下SoftReference里的对象

对于WeakReference,只能想到一个应用场景,那就是,类A里引用了类B里的一个field实例,目的就是为了当类B以及其成员没被GC是,想在类A的方法里对这个field进行操作,如果已经GC了,那么就什么都不做。

比如:一个异步请求返回数据时,去更新页面A里的表格,就可以在请求类里保持一个对页面A里表格的一个WeakReference,如果在请求还未返回的时候,页面A已经关掉了的话,也不影响表格的释放。页面A没关掉的话,就可以直接更新了。

猜你喜欢

转载自weiqingfei.iteye.com/blog/2279085