JAVA引用类型分析

 

1、引用对象类型定义

    首先,引用对象在Java定义中有三种类型,从弱到强依次为:软引用、弱引用与虚引用,三种级别也各有所不一样(软引用>弱引用)。本文浅析下软引用与弱引用。大概的解释,软引用适合应用在须要cache的场景,通常面向实现内存敏感的缓存;弱引用则是适用在某些场景为了没法防止被回收的规范性映射,它优先级最低,通常与引用队列联合使用。算法

详细介绍:
(一)强引用(默认存在)
    强引用,是在实际开发中最为广泛的引用。有时候你开发的时候,申请一个内存空间的时候,就已是强引用了。例如:缓存

Object obj =new Object();  // 强引用

    在强引用中,若是不让该对象指向为空,垃圾回收器绝对不会回收它。除非当出现内存空间不足的时候。jvm抛出oom致使程序异常种植的时候,才会回收具备强引用的对象来解决内存空间不足问题。安全

Object obj =new Object();  // 强引用
   obj = null;//这时候为垃圾回收器回收这个对象,至于何时回收,取决于垃圾回收器的算法

(二)软引用(SoftReference )
    软引用对象也比较好理解,它是一个比较特殊的存在,拥有强引用的属性,又更加安全。若是有一个对象具备软引用。在内存空间足够的状况下,除非内存空间接近临界值、jvm即将抛出oom的时候,垃圾回收器才会将该引用对象进行回收,避免了系统内存溢出的状况。(前提也是对象指向不为空)所以,SoftReference 引用对象很是适合实现内存敏感的缓存,例如加载图片的时候,bitmap缓存机制。jvm

String value = new String(“sy”);
SoftReference sfRefer = new SoftReference (value );

sfRefer .get();//能够得到引用对象值

(三)弱引用(WeakReference)
    顾名思义,一个具备弱引用的对象,与软引用对比来讲,前者的生命周期更短。当垃圾回收器扫描到弱引用的对象的时候,无论内存空间是否足够,都会直接被垃圾回收器回收。不过也不用特别担忧,垃圾回收器是一个优先级比较低的现场,所以不必定很快能够发现弱引用的对象。
   另外,google官方是推荐Android开发者使用WeakReference,而不建议SoftReference 引用,Android环境下与纯Java有所略同。下面待会说明状况。google

String value = new String(“sy”);
WeakReference weakRefer = new WeakReference(value );

System.gc();

weakRefer.get();//null



参考文献:https://www.jianshu.com/p/b56731447179spa

相关文章
相关标签/搜索