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

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

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

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

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

无法忍受旧版不兼容PHP7+主题 更换新主题

今天父亲节我们有没有陪伴家人一起吃个饭,还是打个电话问候一下。前一段时间同学将网站账户给我说可以有空更新点信息确保他在没有时间的时候还能保持网站有一定的更新内容。不过,他这个网站之前采用的主题也不知道来源哪里,总之各种不合适,文件中很多都是他多年来手工修改的主题拼接的,并非完全适应WordPress已有的函数,有些函数还不兼容最新的PHP版本,于是每次出现问题都要去排查。于是和他商量后,就抽时间把...

提速啦香港独立物理服务器E3 16G 20M 5IP 299元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

VirMach:$27.3/月-E3-1240v1/16GB/1TB/10TB/洛杉矶等多机房

上次部落分享过VirMach提供的End of Life Plans系列的VPS主机,最近他们又发布了DEDICATED MIGRATION SPECIALS产品,并提供6.5-7.5折优惠码,优惠后最低每月27.3美元起。同样的这些机器现在订购,将在2021年9月30日至2022年4月30日之间迁移,目前这些等待迁移机器可以在洛杉矶、达拉斯、亚特兰大、纽约、芝加哥等5个地区机房开设,未来迁移的时...

softreference为你推荐
允许traceroute探测使用 traceroute 和 NeoTrace 之类的程序可能引起哪些网络安全问题互联网舆情监控系统互联网舆情监控系统软硬件有哪些?youtube创始人鬼步舞创作者是谁ico监管ICO为什么被叫停webservice框架用JAVA作APP后端,一般用什么web service?用什么restful框架shoujiao求【叫兽】的简介方正证券官方网方正证券完美版下载医院排队系统医院门诊排队叫号系统防火墙技术应用在网络支付流程中,防火墙技术与数据加密技术应用则重点有什么不同?yui3求Yui的详细资料
网站域名备案查询 工信部域名备案系统 webhosting 128m内存 优key 彩虹ip 什么是刀片服务器 cdn联盟 万网空间购买 华为云盘 ledlamp 免费个人主页 免费稳定空间 阿里云邮箱个人版 cdn服务 数据湾 wordpress空间 香港ip 脚本大全 zcloud 更多