JAVA中的强引用、软引用、弱引用、虚引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LiuXudongHnu/article/details/62440973
       Java中关于引用的定义为:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些“食之无味,弃之可惜”的对象就显得无能为力。我们希望可以描述这么一类对象: 当内存足够时,可以保留在内存中;如果内存空间在进行垃圾回收后还是很紧张,那么就把他抛弃( 几种引用类型产生的目的 )。JDK 1.2之后,Java对引用的概念进行了扩充,将引用分为:强引用、软引用、弱引用、虚引用4种。这4种引用强度依次减弱。
       强引用:普遍存在的。比如Object obj=new Object();这类的引用,只要强引用存在,GC就永远不会回收掉这类被引用的对象。
       软引用:一些还有用但是并非必须的对象。JDK1.2后,提供了SoftReference类来实现软引用。例如1、Object obj=new Object(); SoftReference sf=new SoftReference(obj);这样就实现了一个软引用。一般软引用用来实现内存敏感的高速缓存。注:内存不足时,进行回收。
       弱引用:用来描述非必需对象的,强度比软引用还要弱,被弱引用关联的对象只能生存到下一次垃圾回收之前。在GC扫描它所管辖的内存区域时,一旦发现弱引用对象,就会将它回收掉。JDK1.2后使用WeakReference来实现弱引用。例:Object obj=new Object();WeakReference wf=new WeakReference(obj);这样就实现了一个软引用。注:只要被发现,立马回收。
       虚引用:形同虚设。如果一个对象持有虚引用,那么任何时候都可能被回收。为一个对象设置虚引用关联的唯一目的就是能够在这个对象被收集器回收时收到一个系统通知。

猜你喜欢

转载自blog.csdn.net/LiuXudongHnu/article/details/62440973