Java的四种引用

    很少有同学知道java里面的强弱软虚四种引用吧,今天来简单介绍一下。

   java.lang.ref 下 SoftReference WeakReference  PhantomReference 三个类,代表了软 弱 虚三种引用。

  (1)强引用

    我们一般,不使用其他三种方式的引用都是强引用,强引用就好比是生活中的必须品,对于jvm来说,只要对象被强引用,绝对是不能回收的,所以jvm即使内存泄露也不会回收,因此强引用也是内存泄露的一个原因

(2)软引用

  软引用就比较软弱些了,jvm就喜欢欺负这样的,当jvm内存充足的时候,软引用没事,但是一旦内存不足,jvm就会清除软引用的对象。   

  软引用对于内存敏感度 程序中,是强引用很好的替代。

  当程序需要大量创建某个类的新对象,而且有可能访问已创建的老对象时,可以充分使用软引用: 定义一个软引用数组 new SoftReference<> ,内存不足的时候,对象会被回收,不会造成内存泄露,强引用就会造成内存泄露。

(3)弱引用

 弱引用更弱,内存充足的时候也会被回收,这就有个问题,弱引用的对象,你第二次使用的时候,可能已经是null了,所以要进行判断,

 obj = wr.get();

if(obj == null){

obj = new();

        wr = new WeakReference(obj);

}

(4)虚引用

虚引用单独存在没有意义,

【虚引用】phantomReference,虚引用形同虚设,不会决定对象的生命周期。如果一个一个对象仅持有虚引用,则和没有任何引用一样,在任何时候都会被回收。
【虚引用的使用】主要是跟踪对象被垃圾回收的活动。
虚引用必须和引用队列联合使用。当GC准备回收一个对象时,如果发现还有虚引用,则回收之前将虚引用加入与之关联的引用队列中。
程序用过判断引用队列中是否加入了虚引用来判断被引用的对象是否将要被回收。程序如果发现某个虚引用已经被加入到引用队列,则可以在所引用的对象被回收之前采取必要的活动。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值