强引用(StrongReference) ------ 描述必不可少的必须的对象
如果一个对象具有强引用,那就类似于必不可少的物品,不会被垃圾回收器回收。
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。
软引用(SoftReference) ------ 描述一些有用但并不是必需的对象
软引用关联的对象,只有在内存不足的时候JVM才会回收该对象。
因此,可以很好地用来解决OOM的问题
弱引用(WeakReference) ------ 描述非必需对象的
当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。
具有弱引用的对象, 拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,
不管当前内存空间足够与否,都会回收它的内存。
弱引用与软引用的区别:
软引用关联的对象只有在内存不足时才会被回收,
而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。
弱引用(PhantomReference) ------
如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收的活动.
引用类型 | 被回收时间 | 用途 | 生存时间 |
强引用 | 从来不会 | 对象的一般状态 | JVM停止运行时 |
软引用 | 内存不足时 | 对象缓存 | 内存不足时 |
弱引用 | jvm垃圾回收时 | 对象缓存 | gc运行后 |
虚引用 | 未知 | 未知 | 未知 |