06、java中的引用(强、软、弱、虚)

1、java中的引用

强、软、弱、虚

(1)、强引用
M m = new M()
  • 调用GC时,即使栈空间被占满也只会抛出内存溢出异常而不会回收空间。
  • m = null,将引用指向null,在下次GC时空间会被回收。
(2)、软引用
 	//m指向SoftReference,SoftReference中有一个软引用指向new byte[1024*1024*10]
    //当有一个对象被软引用指向时,只有系统内存(堆内存)不够用才会被GC回收
    SoftReference<byte[]> m = new SoftReference<>(new byte[1024*1024*10]);
  • 软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。
  • 软引用是用来描述一些还有用但并非必须的对象,软引用非常适合缓存使用
(3)、弱引用
WeakReference<M> m = new WeakReference<>(new M());
  • 弱引用遭到gc就会回收
  • 应用:1、ThreadLocal Thread.currentThread.map(ThreadLocal,Value)设置到当前线程的map中 。ThreadLocal是一个弱引用 2、WeakHashMap 3、redis(c)也是用的弱引用
(4)、虚引用
PhantomReference<M> phantomReference = new PhantomReference<>(new M(), QUEUE);
  • 一个对象是否有虚引用的存在,完全不会对其生存时间构成影响
  • 无法通过虚引用来获取一个对象的实例
  • 为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知
  • 虚引用有一个很重要的用途就是用来做堆外内存的释放
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值