强引用,软引用,弱引用,虚引用

重点是前三个:强引用,软引用,弱引用

要直到什么场景下会使用软引用和弱引用,面试官会问

引用就是指针,指向内存空间中某个对象

1.强引用 (就是直接引用)

我们平常A a=new A()所new出来的对象就是强引用

垃圾回收时,被强引用指向的对象不会被回收

2.软引用
当发生垃圾回收的时候,如果此时当内存不够的时候,会回收软引用指向的对象,如果内存时够的,不会回收这个被软引用指向的对象

SoftReference test=new SoftReference(new byte[1024*1024*10]);//new一个10MB的空间


或者下面的例子:
SoftReference test=new SoftReference(new String("aa"));

缓存中经常会用到软引用

强引用指向的对象不能被清除掉,很容易导致内存溢出有,当再有有用的数据进来的时候,没有空间存放了

用软引用的好处就是,空间不够的时候,软引用指向的对象就会被回收,这样有用的数据进来之后就有空间存放了

也就是说,软引用指向的一般是不重要的对象

软引用是实现缓存的理想选择,特别是当内存资源有限时。通过使用软引用来存储缓存的对象,当内存紧张时,垃圾收集器可以自动回收这些对象,从而避免了内存溢出(OutOfMemoryError)的风险。当内存资源充足时,缓存的对象可以保留在内存中,提高程序的运行效率。

3.弱引用

当发生垃圾回收的时候,不管内存够不够,软引用指向的对象都会被回收

WeakReference test=new WeakReference(new byte[1024*1024*10]);//new一个10MB的空间

或者:
WeakReference test=new WeakReference(new String("abc"));

System.out.println(test.get());//输出:abc

System.gc();//进行垃圾回收

System.out.println(test.get());//输出:null

在某些情况下,你可能希望缓存的对象在不被使用后就立即释放。这种情况下,弱引用可以作为缓存的理想选择。与软引用不同,弱引用不会在内存紧张时才被回收,而是在每次垃圾收集时都被回收。这可以帮助你在需要频繁释放缓存对象时提高内存使用效率。

软(弱)引用配合引用队列使用:软(弱)引用自身也是一个对象,当软(弱)引用的对象被回收掉以后,软(弱)引用自身这个对象会进入引用队列中

4.虚引用

引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值