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

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

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

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

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

乌云数据(10/月),香港cera 1核1G 10M带宽/美国cera 8核8G10M

乌云数据主营高性价比国内外云服务器,物理机,本着机器为主服务为辅的运营理念,将客户的体验放在第一位,提供性价比最高的云服务器,帮助各位站长上云,同时我们深知新人站长的不易,特此提供永久免费虚拟主机,已提供两年之久,帮助了上万名站长从零上云官网:https://wuvps.cn迎国庆豪礼一多款机型史上最低价,续费不加价 尽在wuvps.cn香港cera机房,香港沙田机房,超低延迟CN2线路地区CPU...

HostKvm新上联通CUVIP线路VPS,八折优惠后1G内存套餐$5.2/月起

最近上洛杉矶机房联通CUVIP线路主机的商家越来越多了,HostKvm也发来了新节点上线的邮件,适用全场8折优惠码,基于KVM架构,优惠后最低月付5.2美元起。HostKvm是一家成立于2013年的国人主机商,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,君选择国内直连或优化线路,延迟较低,适合建站或者远程办公等。以洛杉矶CUVIP线路主机为例,...

飞讯云E5-2678V3 64GB,湖北十堰100G高防物理机330元/月

飞讯云官网“飞讯云”是湖北飞讯网络有限公司旗下的云计算服务品牌,专注为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。飞讯云是国内为数不多具有ISP/IDC双资质的专业云计算服务商,同时持有系统软件著作权证书、CNNIC地址分配联盟成员证书,通过了ISO27001信息安全管理体系国际认证、ISO9001质量保证体系国际认证。 《中华...

softreference为你推荐
小明发布首页永久网站2015小明发布看看永久域在哪里能找到免费的短信营销方案家装短信营销如何进行才有效?短信营销方案有谁实验过短息营销,这个方法好吗?大家可以试试啊!scriptmanagerscriptmanager.registerstartupscript是.net3.5吗avc是什么格式电厂AVC啥意思?上行宽带上行宽带和下行宽带什么意思云输入法QQ云输入法怎样进行中英文切换?java程序员招聘java工程师待遇如何selectintoACCESS中提示“不允许在select into语句中使用多值字段”怎么查微信注册时间怎么查看自己的微信号用了多久
香港虚拟主机 息壤主机 火车票抢票攻略 刀片式服务器 免费网页空间 空间购买 阿里云官方网站 防cc攻击 域名转入 华为云服务器宕机 主机声音大 百度空间登陆首页 创梦天地 北京市摇号申请网站 北京汽车摇号申请网站 789*** 免费网络代理 测试网络速度 上海联通网上营业厅 学历认证机构 更多