java的强软弱虚引用
在了解ThreadLocal的时候看到关于引用的东西
StrongReference(强引用)
强引用是使用最普遍的引用,一般声明如:Object strongReference = new Object();如果要对强引用进行垃圾回收,需要设置强引用对象为 null ,或者让其超出对象的生命周期范围,则认为改对象不存在引用。
SoftReference(软引用)
软引用是在系统发生OOM之前才被JVM回收掉。软引用常被用来对于内存敏感的缓存。
WeakReference(弱引用)
一旦JVM执行GC,弱引用就会被回收掉。 (ps: Weak 虚弱的 ; 无力的 ; 不牢固的 ; 易损坏的 ;)
PhantomReference(虚引用)
虚引用主要作为其指向referent被回收时的一种通知机制。
四种引用类型对比
引用类型 |
被垃圾回收时间 |
用途 |
生存时间 |
---|---|---|---|
强引用 |
从来不会 |
对象的一般状态 |
JVM 停止运行时终止 |
软引用 |
当内存不足时 |
对象缓存 |
内存不足时终止 |
弱引用 |
正常垃圾回收时 |
对象缓存 |
垃圾回收后终止 |
虚引用 |
正常垃圾回收时 |
跟踪对象的垃圾回收 |
垃圾回收后终止 |
Reference为引用对象的抽象基类,如下图所示: