java引用方式

垃圾回收的机制主要是看对象是否有引用指向该对象,java对象的引用包括:强引用,软引用,弱引用,虚引用

1.强引用

 是指创建一个对象并把这个对象赋给一个引用变量。

 强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。 

Object obj = new Object();


可直接通过obj取得对应的对象 如obj.equels(new Object());

2.   软引用:

非必须引用,内存溢出之前进行回收,可以通过以下代码实现
Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;
sf.get();//有时候会返回null
这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null;
软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。

软引用可用来实现内存敏感的高速缓存。 

//定义一个HashMap,保存软引用的Bitmap对象,可防止OOM
    private Map<String, SoftReference<Bitmap>> imageCaches =             
        Collections.synchronizedMap(new HashMap<String, SoftReference<Bitmap>>());

 /**添加软引用Bitmap到Map中,使其缓存*/
    public void addBitmapToCache(String path) {
        imageCaches.put(path, new SoftReference<Bitmap>                                
           (BitmapFactory.decodeFile(path)));
    }
    /** 从缓存中取软引用的Bitmap对象*/
    public Bitmap getBitmapFromCache(String path) {
        SoftReference<Bitmap> softBitmap = imageCaches.get(path);
        //如果软引用还存在,那么直接就可以获取这个对象的相关数 据...这样就实现了cache...
        if (softBitmap != null) {
            return softBitmap.get();
        } else {
            //重新实例化对象,获取数据信息
        }
    }

3.    弱引用(WeakReference)

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

4.    虚引用

    虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。

ReferenceQueue queue = new ReferenceQueue ();

PhantomReference pr = new PhantomReference (object, queue); 

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值