Java对象的硬、软、弱和虚引用

java对对象的引用有如下4中方式:
硬引用(StrongReference)

程序创建一个对象,并把对象覆盖一个引用变量,通过这个引用变量操作实际的对象。当一个对象被一个或多个引用变量引用时,它就处于可达状态,这个时候系统的垃圾回收机制就不会回收它。

软引用(SoftReference)

通过类SoftReference实现,当系统内存足够的时候,它不会被回收;但是当系统内存不足的时候,回收机制就会将其回收。Android中常用它来优化图片的异步加载。(现在一般使用LruCache,因为android 2.3+(API Level9)之后,SoftReference在内存够用的时候也有可能被提前释放掉)

弱引用(WeakReference)

通过WeakReference类实现,比软引用级别低。不过系统内存是否足够,只要回收机制运行,就会被回收

虚引用(PhantomReference)

对 对象本身没有影响,虚引用要个引用队列一起使用才有意义。当对象被回收时,与其关联的虚引用就会被放到引用队列中,通过在引用队列中查看虚引用可以在对象回收之前采取相应的行动。

举个例子:

public class Reference(){
    public static void main(String[] args){
        String str = new String("java对象");
        //创建一个引用队列
        ReferenceQueue rq = new ReferenceQueue();
        //创建一个虚引用
        PhantomReference pr = new PhantomReference(str,rq);
        System.out.println(pr.get());//显示null 因为虚引用实际不会获得对象
        //强制回收
        System.gc();
        System.runFinalization();
        //从引用队列中取出最先进入队列的引用也就是pr
        System.out.println(rq.poll == pr);
    }
}

以上是我对java引用的认识,有不对的欢迎留言指正,又不懂得欢迎交流

posted @ 2016-01-01 11:04  Z漫步  阅读(312)  评论(0编辑  收藏  举报