您当前的位置:首页 > 计算机 > 编程开发 > Java

Java 软引用和弱引用

时间:12-14来源:作者:点击数:
城东书院 www.cdsy.xyz

对于强引用,我们平时在编写代码时经常会用到。而对于其他三种类型的引用,使用得最多的就是软引用和弱引用,这2种既有相似之处又有区别。它们都是用来描述非必需对象的,但是被软引用关联的对象只有在内存不足时才会被回收,而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。

在 SoftReference 类中,有三个方法,两个构造方法和一个 get 方法(WekReference 类似)。get 方法用来获取与软引用关联的对象的引用,如果该对象被回收了,则返回null。在使用软引用和弱引用的时候,我们可以显示地通过 System.gc() 来通知 JVM 进行垃圾回收,但是要注意的是,虽然发出了通知,JVM 不一定会立刻执行,也就是说这句是无法确保此时 JVM 一定会进行垃圾回收的。

如何利用软引用和弱引用解决 OOM 问题

前面讲了关于软引用和弱引用相关的基础知识,那么到底如何利用它们来优化程序性能,从而避免 OOM 的问题呢?

下面举个例子,假如有一个应用需要读取大量的本地图片,如果每次读取图片都从硬盘读取,则会严重影响性能,但是如果全部加载到内存当中,又有可能造成内存溢出,此时使用软引用可以解决这个问题。

设计思路是:用一个 HashMap 来保存图片的路径 和 相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了 OOM 的问题。在 Android 开发中对于大量图片下载会经常用到。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐