本文主要介绍如何如何理解Java的四种引用.
这四种引用的文章已经很多了,但是大部分的文章都不太只管,本文提供了易理解的表达.
进程内存不足
如果JVM进程内存不足
,将释放软引用
的对象的内存以满足内存申请;
可达性
其他情况,当GC扫描到对象时,先判断对象的可达性
:
如果不可达,将被直接回收
如果可达:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 1. 有且只有强引用,不被回收
2. 有且只有弱引用,可被回收 应用场景:引用别的对象,但不希望因为自己的生命周期影响到了别的对象被回收. 例如:A对象和B对象,B需要引用A,但是,当A可以被回收而B还在持续运行不可被回收时,由于B对A是强引用,导致A无法被回收,此时,可将B对A的引用使用WeakRefrence声明
3. 有且只有软引用,不被回收 应用场景:可从其他渠道被还原的缓存池, 例如:图片缓存,放在内存中提效,内存不足时就读文件降低性能,释放内存. redis缓存也是一个例子,当内存不足时,清除redis的缓存,使用者可直接穿透到DB读取值 4. 有且只有虚引用,被回收 应用场景:监控对象状态,强制配合引用队列(Reference Queue)的使用
|