JAVA强引用、软应用、虚引用、弱引用

来源:互联网 发布:圆方家居设计软件破解 编辑:程序博客网 时间:2024/06/05 08:36

JAVA强引用、软应用、虚引用、弱引用

java中提供了四个对象引用:强引用、软引用、弱引用、虚引用。除了强引用,其他的三种引用在java.lang.ref中都可以找到。

1、强引用

代码实例:Object ob=new Object();

强引用有几个特性:

l 强引用可以直接访问引用对象

强引用在任何时候都不会被释放,虚拟机就算报OOM也不会释放对象

强引用可能会引起OOM

2、软引用

代码实例:

     Object obj = new Object();

         SoftReference<Object> sf = new SoftReference<Object>(obj);

         obj = null;

         obj=sf.get();//get方法可以获取对象

 

 

软引用的特性:

l GC不一定会回收软引用对象,但是当内存紧张的时候会进行内存回收。

l SoftReference在手机移动开发中使用场景比较多,比如缓存图片(局限于手机内存不高)

 

3、弱引用

代码实例:

     Object obj = new Object();

         WeakReference<Object>sf = new WeakReference<Object>(obj);

         obj = null;

         obj=sf.get();//get方法可以获取对象

弱引用的特性

弱引用在系统GC时一定会回收对象。但是由于进行GC的线程优先级是非常低的,所以不一定很快能发现弱引用对象,所以弱引用还是能存在相当厂的时间。

 

4、虚引用

代码实例:

     Object obj = new Object();

     ReferenceQueue<Object> queue=new ReferenceQueue<>();

         PhantomReference<Object>sf = new PhantomReference<Object>(obj,queue);

         obj = null;

虚引用的特性:

虚引用是所有的引用最弱的,一个持有虚引用的对象跟没有引用对象几乎一样,随时可能被GC回收掉。当试图通过get方法获取强引用时候,总是失败的。并且虚引用必须使用引用队列,追踪回收过程。

 

 

 

0 0
原创粉丝点击