強引用(Strong Reference)
最常用的引用類型,如Object obj = new Object(); 。只要強引用存在則GC時則必定不被回收。
軟引用(Soft Reference)
用于描述還有用但非必須的對象,當堆將發生OOM(Out Of Memory)時則會回收軟引用所指向的內存空間,若回收后依然空間不足才會拋出OOM。一般用于實現內存敏感的高速緩存。 當真正對象被標記finalizable以及的finalize()方法調用之后并且內存已經清理, 那么如果SoftReference object還存在就被加入到它的 ReferenceQueue.只有前面幾步完成后,Soft Reference和Weak Reference的get方法才會返回null
弱引用(Weak Reference)
發生GC時必定回收弱引用指向的內存空間。 和軟引用加入隊列的時機相同
虛引用(Phantom Reference)
又稱為幽靈引用或幻影引用,虛引用既不會影響對象的生命周期,也無法通過虛引用來獲取對象實例,僅用于在發生GC時接收一個系統通知。 當一個對象的finalize方法已經被調用了之后,這個對象的幽靈引用會被加入到隊列中。通過檢查該隊列里面的內容就知道一個對象是不是已經準備要被回收了. 虛引用和軟引用和弱引用都不同,它會在內存沒有清理的時候被加入引用隊列.虛引用的建立必須要傳入引用隊列,其他可以沒有