java有四種引用類型
- StrongReference 強引用,最普通的引用,虛擬機即使拋出OOM也不會回收此類引用的對象
- SoftReference 軟引用,虛擬機只在OOM前會回收此類引用(虛擬機在GC后發(fā)現(xiàn)內(nèi)存空間仍然不足時,會回收軟引用的對象)
- WeakReference 弱引用,虛擬機在GC時會回收此類引用
- PhantomReference 虛引用,僅用來處理資源清理問題,比finalize靈活
總結(jié)一下
| 引用類型 | 目的 | 應(yīng)用 | GC時機 | 實現(xiàn)類 |
|---|---|---|---|---|
| 強引用 | 普通引用類型 | 普通引用類型 | 永遠不會被GC | |
| 軟引用 | 只要內(nèi)存充足,對象就不會被回收 | 內(nèi)存敏感的緩存,可以一直填充對象而不會OOM的Map | OOM前進行回收 | SoftReference |
| 弱引用 | 不再使用時被GC回收 | 容器認為對象無用時,取消強引用,自動被GC回收 | GC時 | WeakReference,WeakHashMap |
| 虛引用 | 處理資源清理問題,比finalize靈活 | finalize函數(shù)的替代或增強 | GC時 | PhantomReference |