四种引用类型

引用类型

在这里插入图片描述

强引用(默认支持模式)

当内存不足,JVM会进行垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收

类似“Object o1 = new Object() ”这类的引用都是强引用,只要强引用还在,垃圾收集器就不会回收掉被引用的对象。即使该对象以后永远都不会被用到,JVM也不会回收,因此强引用是造成Java内存泄露的主要原因之一。

软引用

软引用是一种相对强引用弱化了一些的引用,SoftReference类实现

对于只有软引用的对象来说:

  1. 当系统内存足够的时候,不会被回收
  2. 当系统内存不足的时候,会被回收

软引用通常被用在对内存敏感的程序中,比如高速缓存

弱引用

弱引用比软引用更弱,WeakReference类实现

对于弱引用对象来说,只要发生GC,弱引用就会被回收,不管内存够不够

WeakHashMap

当key值消失被清除的时候,WeakHashMap中的节点也会被清除

虚引用

最弱的一种引用关系。PhantomReference类实现

虚引用并不会决定对象的生命周期,如果一个对象仅持有虚引用,那么它就和没有引用一样,在任何时刻都有可能会被垃圾回收器回收,它不能单独使用,也不能通过它访问对象,虚引用要和引用队列(ReferenceQueue)联合使用

设置虚引用的作用是在这个对象被GC的时候收到一个系统通知或者添加进一步的处理。Java允许使用finalize()方法在垃圾回收器将对象从内存中清除前做一些必要的清理工作

引用队列

ReferenceQueue是用来配合引用工作的,创建引用的时候可以指定关联的队列,当GC释放该对象的内存的时候,会将引用加入到引用队列中。

Object o1 = new Object();
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference<Object> reference = new PhantomReference<>(o1,referenceQueue);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值