java对象的四种引用级别

为了使程序能更加灵活地控制对象的生命周期从JDK1.2版本开始,JDK 把对象的引用级别分为了以下四种。由高到低:强引用→软引用→弱引用→虚引用。

强引用 (StrongReference)

强引用就是我们平常最基本的对象引用,JVM 也不会回收带有强引用的对象,即使内存不足导致抛出 OutOfMemoryError 异常,JVM 也不会回收强引用对象。平时我们用关键字new 出来的对象都是强引用。

软引用 (SoftReference)

如果一个对象只有软引用,在内存空间足够情况下,垃圾回收器就不会回收它。如果内存空间不够了,就会对这些只有软引用的对象进行回收。只要垃圾回收器没有回收,该软引用对象就可以继续被程序使用。所以软引用一般用来实现一些内存敏感的缓存,只要内存空间足够,对象就会保持不被回收掉。

弱引用 (WeakReference)

弱引用的对象具有更短暂的生命周期,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间是否足够,都会进行回收。由于垃圾回收器线程优先级很低,弱引用的对象也不一定会被很快回收。

虚引用(PhantomReference)

虚引用,顾名思义就是形同虚设,虚引用不决定对象的生命周期,如果一个对象仅持有虚引用那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。无法通过虚引用取得一个对象实例,即:get()方法永远返回NULL。虚引用主要用来跟踪对象被垃圾回收器回收的活动,虚引用必须和引用队列 (ReferenceQueue)联合使用,当垃圾回收器准备回收一个对象时如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列。

参考:

Java四大引用详解:强引用、软引用、弱引用、虚引用 - 掘金 (juejin.cn)

你可能感兴趣的:(java,开发语言,jvm)