java有四种引用类型
- StrongReference 强引用,最普通的引用,虚拟机即使抛出OOM也不会回收此类引用的对象
- SoftReference 软引用,虚拟机只在OOM前会回收此类引用(虚拟机在GC后发现内存空间仍然不足时,会回收软引用的对象)
- WeakReference 弱引用,虚拟机在GC时会回收此类引用
- PhantomReference 虚引用,仅用来处理资源清理问题,比finalize灵活
总结一下
引用类型 | 目的 | 应用 | GC时机 | 实现类 |
---|---|---|---|---|
强引用 | 普通引用类型 | 普通引用类型 | 永远不会被GC | |
软引用 | 只要内存充足,对象就不会被回收 | 内存敏感的缓存,可以一直填充对象而不会OOM的Map | OOM前进行回收 | SoftReference |
弱引用 | 不再使用时被GC回收 | 容器认为对象无用时,取消强引用,自动被GC回收 | GC时 | WeakReference,WeakHashMap |
虚引用 | 处理资源清理问题,比finalize灵活 | finalize函数的替代或增强 | GC时 | PhantomReference |