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

6 篇文章 0 订阅

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方法获取强引用时候,总是失败的。并且虚引用必须使用引用队列,追踪回收过程。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值