java对引用的分类
来源:互联网 发布:php 搭建企业网站 编辑:程序博客网 时间:2024/06/03 16:56
Java对引用的分类有 Strong reference, SoftReference, WeakReference, PhatomReference 四种。
在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。
软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软/弱引用。
假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到。如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低。所以我们考虑将图片缓存起来,需要的时候直接从内存中读取。但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常。这时,我们可以考虑使用软/弱引用技术来避免这个问题发生。以下就是高速缓冲器的雏形:
首先定义一个HashMap,保存软引用对象。
private Map <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> ();
- 1
再来定义一个方法,保存Bitmap的软引用到HashMap。
public class CacheBySoftRef { //首先定义一个HashMap,保存软引用对象 private Map<String,SoftReference<Bitmap>> imageCache=new HashMap<>(); /** * 再来定义一个方法,保存Bitmap的软引用到HashMap */ public void addBitmapToCache(String path){ //强引用的Bitmap对象 Bitmap bitmap= BitmapFactory.decodeFile(path); //软引用的Bitmap对象 SoftReference<Bitmap> softBitmap=new SoftReference<Bitmap>(bitmap); //添加该对象到Map中使其缓存 imageCache.put(path,softBitmap); } /** * 获取的时候,可以通过SoftReference的get()方法得到Bitmap对象 * @param path * @return */ public Bitmap getBitmapByPath(String path){ //从缓存中取软引用的Bitmap对象 SoftReference<Bitmap> softBitmap=imageCache.get(path); //判断是否存在软引用 if (softBitmap==null){ return null; } //通过软引用取出Bitmap对象,如果由于内存不足Bitmap被回收,将返回null, // 如果未被回收,则可以重复使用,提高速度 Bitmap bitmap=softBitmap.get(); return bitmap; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。
如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。
另外可以根据对象是否经常使用来判断选择软引用还是弱引用。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。
- java对引用的分类
- Java中关于对象引用的分类
- 浅谈引用<二> Java中引用的分类
- java 引用对象分类
- 树莓派下java对GPIO引脚的引用
- Java 中对类的主动引用和被动引用
- Java 中对类的主动引用和被动引用
- 对java对象的地址引用及值引用
- Java中对类的主动引用和被动引用
- Java 中对类的主动引用和被动引用
- Java中的引用及分类
- 对JAVA强引用、软引用、弱引用、虚引用的理解
- 关于JAVA的垃圾回收机制-引用分类
- Java 引用类型的分类 -- 强软弱虚
- 对引用的认识
- 对数组的引用
- 对jquery的引用
- 由JAVA参数传递引发的对引用的思考
- 数据结构实验之二叉树七:叶子问题
- 机器学习-python编写Adaboost元算法提高分类性能
- mysql文章与标签简单查询
- django使用总结
- ural 1101(Robot in the Field )表达式求值
- java对引用的分类
- 输入
- 习题5.2
- 第十周项目二——二叉树算法验证
- DOM的基本概念
- 大括号{}的意义与静态代码块与构造函数的加载关系
- 关于seo写作内容的一些探讨
- HTML5新标签嵌套
- HBase之重试机制