Java对象的强软弱虚四种引用的作用与回收
来源:互联网 发布:淘宝开店认证2张银行卡 编辑:程序博客网 时间:2024/04/28 06:33
Java对引用的分类有 Strong reference, SoftReference, WeakReference, PhatomReference 四种。
在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。
软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软/弱引用。
假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到。如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低。所以我们考虑将图片缓存起来,需要的时候直接从内存中读取。但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常。这时,我们可以考虑使用软/弱引用技术来避免这个问题发生。以下就是高速缓冲器的雏形:
首先定义一个HashMap,保存软引用对象。
private Map <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> ();
再来定义一个方法,保存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; }}
使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。
如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。
另外可以根据对象是否经常使用来判断选择软引用还是弱引用。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。
- Java对象的强软弱虚四种引用的作用与回收
- java的软弱引用
- Java 引用类型的分类 -- 强软弱虚
- Java中强软弱虚四种引用
- Java四种对象引用类型:强软弱虚
- Java垃圾回收中对象的强引用,软引用,弱引用和虚引用
- Java对象的引用与垃圾回收
- Android的强软弱虚引用的基本了解1
- 也来谈谈Android内存的强软弱虚引用
- Java四种引用:强软弱虚
- Java中的引用:强软弱虚
- Java强软弱虚4大引用
- JVM垃圾回收之—强软弱虚引用
- Java四种引用包括强引用,软引用,弱引用,虚引用。 强引用: 只要引用存在,垃圾回收器永远不会回收 Object obj = new Object(); //可直接通过obj取得对应的对象
- 垃圾回收与强引用,软引用,若引用,幻引用的关系
- 垃圾回收与强引用,软引用,弱引用,幻引用的关系
- 垃圾回收与强引用,软引用,弱引用,幻引用的关系
- 引用(强软弱虚)、WeakHashMap、IdentityHashMap与EnumMapJAVA132
- Android开发:Hello World!
- Spring MVC中如何传递对象参数
- centos安装ftp服务器
- HDOJ 4004 The Frog's Games (二分)
- MySQL客户端输出窗口显示中文乱码问题解决办法
- Java对象的强软弱虚四种引用的作用与回收
- BroadcastReceiver工作流程
- 算法导论(4)
- JSP文件中的pageEncoding、contentType
- Kattis <Zamka>
- 51单片机 指纹模块心路历程1
- 快照技术原理
- cURL工具及其应用
- 数码管的简单介绍