Java基础知识总结:Java里四种引用类型的作用和区别

版权声明:本文遵守创作共享 CC BY-NC-SA 3.0协议 https://blog.csdn.net/chen_kkw/article/details/86665562

对这个知识点不要去死记硬背,要知道 Java 为什么要有不同的引用类型,它们存在的意义是什么?其实之所以划分不同的引用类型,主要作用体现在划分对象不同的可达性和 GC 对对象回收的影响。

四种引用类型分别为强引用,软引用,弱引用和虚引用

  1. 所谓强引用,就是我们最常见的普通对象引用,我们 new 出来的对象就是强引用,只要尚且存在强引用指向某一个对象,那就能表明该对象还存活,GC 不能去回收这种对象。需要回收强引用指向的对象,可以等待超出引用区域,或者是显式设置对象为 null,就可以通知让 GC 回收,当然实际的回收时间要看 GC 策略。

  2. 软引用( SoftReference ),用来描述有用但非必须的对象(换句话说就是可有可无,回收了我也不在意),当系统将要发生内存溢出异常(OutOfMemoryError)之前,将会把这些对象放进回收范围中进行第二次回收。软引用通常用来实现内存中的缓存,当还有空闲内存时可以暂时保留这些对象,当内存不足时清理掉,这样就保证了使用缓 存的同时,不会耗尽内存。

  3. 弱引用(WeakReference),同样是描述非必须对象,强度比软引用更弱,被弱引用关联的对象只能生存到下一次垃圾收集发生之前,当垃圾收集器工作时,无论当前内存是否足够,都会回收被弱引用关联的对象。弱引用同样是很多缓存实现的选择。

  4. 虚引用,最弱的一种引用关系,无法通过虚引用取得一个对象实例,唯一目的是能在这个对象被收集器回收时收到一个系统通知。

没有更多推荐了,返回首页