四种引用类型

  • Post author:
  • Post category:其他




引用类型

在这里插入图片描述



强引用(默认支持模式)

当内存不足,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);



版权声明:本文为qq_41282026原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。