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垃圾回收 软引用

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

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

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

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

VoLLcloud(月付低至2.8刀)香港vps大带宽,三网直连

VoLLcloud LLC是一家成立于2020年12月互联网服务提供商企业,于2021年1月份投入云计算应用服务,为广大用户群体提供云服务平台,已经多个数据中心部署云计算中心,其中包括亚洲、美国、欧洲等地区,拥有自己的研发和技术服务团队。现七夕将至,VoLLcloud LLC 推出亚洲地区(香港)所有产品7折优惠,该产品为CMI线路,去程三网163,回程三网CMI线路,默认赠送 2G DDoS/C...

易速互联月付299元,美国独立服务器促销,加州地区,BGP直连线路,10G防御

易速互联怎么样?易速互联是国人老牌主机商家,至今已经成立9年,商家销售虚拟主机、VPS及独立服务器,目前商家针对美国加州萨克拉门托RH数据中心进行促销,线路采用BGP直连线路,自带10G防御,美国加州地区,100M带宽不限流量,月付299元起,有需要美国不限流量独立服务器的朋友可以看看。点击进入:易速互联官方网站美国独立服务器优惠套餐:RH数据中心位于美国加州、配置丰富性价比高、10G DDOS免...

VirMach(8元/月)KVM VPS,北美、欧洲

VirMach,成立于2014年的美国IDC商家,知名的低价便宜VPS销售商,支持支付宝、微信、PayPal等方式付款购买,主打美国、欧洲暑假中心产品,拥有包括洛杉矶、西雅图、圣何塞、凤凰城在内的11个数据中心可以选择,可以自由搭配1Gbps、2Gbps、10Gbps带宽端口,有Voxility DDoS高防IP可以选择(500Gbps以上的防御能力),并且支持在控制面板付费切换机房和更换IP(带...

softreference为你推荐
4k超高清视频下载哪里有4K片源下载啊?补充:刚入手了一个4k电视盒,小美盒子V9,说是支持4k。正好我的电视机是4k的,想知道哪里有得下载呢?有朋友说我傻,现在基本上没有4k片源下载,而且不知道什么时候才有。等到流行的时候也许这个机器又淘汰啦!我该怎么办啊?shoujiao黑鲨手机SKW一AO怎么解锁?qq管家官网腾讯手机管家官网防盗页面地址是什么?知识百科网站客服代码在线客服系统的代码添加到网站中,要怎么做?怎样删除聊天记录怎么批量清除微信聊天记录在线沟通什么是在线状态?在线沟通网络沟通的问题有哪些在线沟通有效沟通的六个要点飞信发信息要钱吗使用手机飞信人别人的手机飞信发短信要钱吗手机在线客服怎么才能联系到腾讯人工客服
狗爹 webhostingpad 便宜建站 轻量 免费网络电视 135邮箱 tna官网 hktv 购买国外空间 流媒体加速 服务器硬件防火墙 申请免费空间和域名 web服务器是什么 镇江高防 免备案cdn加速 广州主机托管 腾讯服务器 架设代理服务器 游戏服务器 瓦工工资 更多