弱引用和软引用WeakReference,SoftReference,最简讲解,以及一个应用场景
2017-11-16 13:09
316 查看
他讲的很好,但是我看了一下,有些地方讲的不是很清楚,导致我当时困惑了一会。这里简单加点内容。
实际上,
Car car = new Car(22000,"silver");
WeakReference<Car> weakCar = new WeakReference<Car>(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还有这个文章也很好。
实际上,
Car car = new Car(22000,"silver");
WeakReference<Car> weakCar = new WeakReference<Car>(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还有这个文章也很好。
相关文章推荐
- 接口回调,用最简单的一个匿名内部类来讲解(附接口回调高级应用场景,让你对接口的了解登堂入室)
- 线程高级应用-心得3-线程范围内的共享变量以及应用场景及面试题案例分析
- iOS容易造成循环引用的三种场景之Block以及对应的使用方法(二)
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- 关于一个服务上面多个应用的场景
- Android Studio 中如何创建一个新的工程以及库文件的创建以及引用
- python 试题:请描述decorator(装饰器)的用法和它的应用场景,如果可以的话,写一个decorator
- 一个小应用解析webview,adapter,以及listview中item点击事件
- 找到了一个利用tesseract做安卓OCR应用的过程讲解
- 【iOS开发-28】制造一个UITabBarController标签控制器、定制UITabBarItem文字图片的6种方式以及More讲解
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- Python——异常(内置异常以及应用场景)
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- RabbitMQ的应用场景以及基本原理介绍 【转】
- RabbitMQ的应用场景以及基本原理介绍
- Java 获取两个List的交集和差集,以及应用场景
- JAVA基础知识以及一个引用方法来求矩形周长的代码
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- Http请求中Content-Type讲解以及在Spring MVC中的应用