Loading...
墨滴

lht94

2021/07/16  阅读:45  主题:默认主题

GC对四种引用的区别

  • 强引用( Strong Reference }:在一个线程内,无需引用直接可以使用的对象,除非引 用不存在了,否则强引用不会被 GC 清理。我们平时声明变量使用的就是强引用,普通 系统 99%以上都是强引用,比如, Strings =”Hello World”。
  • 软引用( Soft Reference l : JVM 抛出 OOM 之前, GC 清理所有的软引用对象。垃圾 回收器在某个时刻决定回收软可达的对象的时候,会清理软引用,并可选地把引用存放 到一个引用队列(Reference Queue) , 类似弱引用,只不过 Java 虚拟机会尽量让软引用的存活时间长一些,迫不得已才清理.
  • 弱引用( Weak Reference ): 弱引用对象与软引用对象的最大不同就在于,当 GC 在 进行回收时,需要通过算法检查是否回收软引用对象,而对于弱引用对象, GC 总是进 行回收。弱引用对象更容易、 更快被 GC 回收。虽然, GC 在运行时一定回收弱引用对 象, 但是复杂关系的弱对象群常常需要好几次 GC 的运行才能完成。就像上面描述的场 景, 弱引用对象常常用于 Map 结构中,引用数据量较大的对象,一旦该对象的强引用 为 null 时, GC 能够快速地回收该对象空间。
  • 虚引用( Phantom Reference ): 又称为幽灵引用,主要目的是在一个对象所占的内存 被实际回收之前得到通知, 从而可以进行一些相关的清理工作。幽灵引用在使用方式上 与之前介绍的三种引用类型有很大的不同。首先幽灵引用在创建时必须提供一个引用队 列作为参数,其次幽灵引用对象的 get 方法总是返回 null, 因此无法通过幽灵引用来获 取被引用的对象。

lht94

2021/07/16  阅读:45  主题:默认主题

作者介绍

lht94