设为首页 加入收藏

TOP

Java 软引用和弱引用
2019-07-05 18:10:21 】 浏览:82
Tags:Java 引用

软引用(SoftReference)


弱引用(WeakReference)


  弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在java中,用java.lang.ref.WeakReference类来表示


虚引用(PhantomReference)


  虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。


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


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


private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();
 
  public void addBitmapToCache(String path) {
 
        // 强引用的Bitmap对象
 
        Bitmap bitmap = BitmapFactory.decodeFile(path);
 
        // 软引用的Bitmap对象
 
        SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap);
 
        // 添加该对象到Map中使其缓存
 
        imageCache.put(path, softBitmap);
 
    }
 
 public Bitmap getBitmapByPath(String path) {
 
        // 从缓存中取软引用的Bitmap对象
 
        SoftReference<Bitmap> softBitmap = imageCache.get(path);
 
        // 判断是否存在软引用
 
        if (softBitmap == null) {
 
            return null;
 
        }
 
        // 取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空
 
        Bitmap bitmap = softBitmap.get();
 
        return bitmap;
 
    }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JavaScript Timing 事件及两种时.. 下一篇C++中的友元函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目