softreference理论上来说,下面哪种引用最容易被jvm垃圾回收 软引用

softreference  时间:2021-06-17  阅读:()

弱引用(weakReference)和softReference有什么区别?

弱引用对象,它们并不禁止其指示对象变得可终结,并被终结,然后被回收。

弱引用最常用于实现规范化的映射。

假定垃圾回收器确定在某一时间点上某个对象是弱可到达对象。

这时,它将自动清除针对此对象的所有弱引用,以及通过强引用链和软引用,可以从其到达该对象的针对任何其他弱可到达对象的所有弱引用。

同时它将声明所有以前的弱可到达对象为可终结的。

在同一时间或晚些时候,它将那些已经向引用队列注册的新清除的弱引用加入队列。

******************************************************************************************* SoftReference: 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。

软引用对象最常用于实现内存敏感的缓存。

假定垃圾回收器确定在某一时间点某个对象是软可到达对象。

这时,它可以选择自动清除针对该对象的所有软引用,以及通过强引用链,从其可以到达该对象的针对任何其他软可到达对象的所有软引用。

在同一时间或晚些时候,它会将那些已经向引用队列注册的新清除的软引用加入队列。

软可到达对象的所有软引用都要保证在虚拟机抛出 OutOfMemoryError 之前已经被清除。

否则,清除软引用的时间或者清除不同对象的一组此类引用的顺序将不受任何约束。

然而,虚拟机实现不鼓励清除最近访问或使用过的软引用。

此类的直接实例可用于实现简单缓存;该类或其派生的子类还可用于更大型的数据结构,以实现更复杂的缓存。

只要软引用的指示对象是强可到达对象,即正在实际使用的对象,就不会清除软引用。

例如,通过保持最近使用的项的强指示对象,并由垃圾回收器决定是否放弃剩余的项,复杂的缓存可以防止放弃最近使用的项 **************************************************** weakReference一般用来防止内存泄漏,要保证内存被VM回收

app运行时发生oom的原因

App使用图片时避免OOM的几种方式: 4.1 直接null或recycle 对于app里使用的大量图片,采用方式:使用时加载,不显示时直接置null或recycle。

这样处理是个好习惯,记本可以杜绝OOM,但是缺憾是代码多了,可能会忘记某些资源recycle。

而有些情况下会出现特定图片反复加载,释放,再加载等,低效率的事情。

4.2 简单通过SoftReference引用方式管理图片资源 建个SoftReference的hashmap 使用图片时先查询这个hashmap是否有softreference, softreference里的图片是否为空, 如果为空就加载图片到softreference并加入hashmap。

无需再代码里显式的处理图片的回收与释放,gc会自动处理资源的释放。

这种方式处理起来简单实用,能一定程度上避免前一种方法反复加载释放的低效率。

但还不够优化。

4.3 强引用+软引用二级缓存 Android示范程序ImageDownloader.java, 使用了一个二级缓存机制。

就是有一个数据结构直接持有解码成功的Bitmap对象引用,同时使用一个二级缓存数据结构保持淘汰的Bitmap的softreference对象,由于softreference对象的特殊性,系统会再需要内存的时候首先将softreference持有的对象释放掉,也就是说当vm发现可用的内存较少需要出发gc的时候,二级缓存中的bitmap对象将被回收,而持有一级缓存的bitmap对象用于显示。

其实这个解决方案最为关键的一点是使用了一个比较合适的数据结构,那就是LinkedHashMap类型来进行一级缓存Bitmap的容器。

由于LinkeHashMap的特殊性,我们可以控制其内存存储对象的个数并且将不在使用的对象从容器中移除,放到softreference二级缓存里,我们可以在一级缓存中一致保存最近被访问到的bitmap对象,而已经被访问过的图片在LinkedHashMap的容量超过我们预设值时将会把容器中存在的时间最长的对象移除,这个时候我么可以将被移除的LinkedHashMap中的放到二级缓存容器,而二级缓存中的对象管理就交给系统来做了,当系统需要gc时就会首先回收二级缓存容器的Bitmap对象了。

在获取图片对象时候先从一级缓存容器中查找,如果有对应对象并可用直接返回,如果没有的话从二级缓存中查找对应的SoftReference, 判断SoftReference对象持有的Bitmap是否可用,可用直接返回,否则返回空。

如果二级缓存都找不到图片,那就直接加载图片资源。

4, LruCache + sd的缓存方式

理论上来说,下面哪种引用最容易被jvm垃圾回收 软引用

打个比方:他们都相当于可有可无的用品。

当内存不够时,垃圾回收器会回收软引用的对象。

弱引用的对象拥有更短暂的生命周期当垃圾回收器扫描的时候不管内存够不够如果发现了弱引用的对象,都会回收。

不过垃圾回收器是一个优先级很低的线程, 因此不一定会很快发现那些只具有弱引用的对象。

UCloud 618活动:香港云服务器月付13元起;最高可购3年,AMD/Intel系列

ucloud6.18推出全球大促活动,针对新老用户(个人/企业)提供云服务器促销产品,其中最低配快杰云服务器月付5元起,中国香港快杰型云服务器月付13元起,最高可购3年,有AMD/Intel系列。当然这都是针对新用户的优惠。注意,UCloud全球有31个数据中心,29条专线,覆盖五大洲,基本上你想要的都能找到。注意:以上ucloud 618优惠都是新用户专享,老用户就随便看看!点击进入:uclou...

美国高防云服务器 1核 1G 26元/月 香港/日本站群服务器 E5 16G 1600元/月 触摸云

触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

softreference为你推荐
大学生就业形势分析大学生就业现状分析mergefieldWORD 邮件合并中----插入的域{MERGEFIELD "班级"},原始1201班想得到前连个字符怎么改域代码?oledbdatareaderDataReader和IDataReader的区别?动态图片格式动态图片什么格式pps官网pps软件下载中心 pps影视软件下载shoujiao手机电池突然充不上电,是怎么回事?该怎么办?netbios协议NETBEUI协议有什么用?java程序员招聘为什么Java程序员工资都很高网络安全密钥网络安全密钥一般是什么方正证券官方网方正证券同花顺下载/2010同花顺官方网站/同花顺官方网站首页
ip反查域名 高防服务器租用 vps是什么意思 上海vps 外国空间 12u机柜尺寸 免费个人博客 免费个人网站申请 中国电信测速112 我爱水煮鱼 架设服务器 asp免费空间申请 免费美国空间 华为云盘 华为云服务登录 四川电信商城 空间登陆首页 云营销系统 服务器维护 国外在线代理服务器 更多