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

本文解析了强引用与弱引用的概念及应用场景,通过示例说明两者如何影响对象的生命周期,并对比了弱引用与软引用的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


实际上,

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.youkuaiyun.com/zmx729618/article/details/54093532,值得去看一下。

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值