弱引用和软引用WeakReference,SoftReference,最简讲解,以及一个应用场景

他讲的很好,但是我看了一下,有些地方讲的不是很清楚,导致我当时困惑了一会。这里简单加点内容。


实际上,

Car car = new Car(22000,"silver");
WeakReference weakCar = new WeakReference(car);

第一行就是new了一个实例,属于强引用,这个还是很好理解的。下面那一行说是弱引用,可实际上又是怎么用的呢?其实他就是让你的强引用变成了弱引用。接下来,如果你再想引用这个car的话。我举个例子。B b = new B(car);这个B类是接受一个car实例的,如果你后面这样写car ==null,这个 new Car(220000,“silver”)是会被回收的。但是如果你不把这个强引用转化为弱引用,那么当car==null的时候,你这个 new Car(220000,“silver”)是不会被回收的,这样就很危险,容易OOM。


概念已经很清晰的讲了,下面再讲一个生动的应用场景,来自某一篇文章的评论。

看到一个android里面用到,他是在gridview里面加载大量图片,然后每个图片开一个线程进行加载,而且要保证imageView被回收。因为adapter是不太可控的,不知道什么时候imageView被android设为null,而且自己的线程什么时候加载完也不确定。所以线程里面不敢用强应用,就是用的弱应用imageView


而SoftReference

就是和WeakReference有一点点的不同,SoftReference比较大方,在内存快用尽的时候才会回收这个对象。而Weak会很快就回收,强引用是就算内存不足了,也不会回收,这就是他的危险之处。


原文是http://blog.csdn.net/zmx729618/article/details/54093532,值得去看一下。

http://blog.csdn.net/matrix_xu/article/details/8424038还有这个文章也很好。

你可能感兴趣的:(java)