面試刷題4:強 弱 軟 幻象 引用的區別?

面試刷題4:強 弱 軟 幻象 引用的區別?

java中的類型除了原生類型,剩下的就是引用類型。研究引用類型對垃圾回收機制,對象的生命週期很有幫助。

我是李福春,我在準備面試,今天我們來解決一個常見的面試題。

強弱軟幻象引用的區別是什麼?

這4種引用的區別在可達性狀態的區別。

下面展開來回答。

分類說明

強引用:當對象剛剛new出來的時候,這種引用叫強引用;強可達性;
當引用超出作用域,或者引用被強制設為null,可以被垃圾回收;

軟引用:可達性低於強可達性,為軟可達性,可以豁免一些垃圾回收。
當jvm認為內存不足的時候,會釋放軟引用。

弱引用:弱可達性,一般用在構建一種沒有特定約束的關係,當通過弱引用可以獲取到對象則獲取,否則重新實例化;

幻想可達:幻想可達性,在對象執行finalize之後,無法通過幻象引用獲取對象;一般用來清理資源;

可達性狀態分析

面試刷題4:強 弱 軟 幻象 引用的區別?

所有的引用都是Reference的子類;

可以人為的改變軟引用,弱引用為強引用。

擴展內容

引用隊列:jvm在特定時間會把所有的引用放入引用隊列,在這裡可以進行一些邏輯操作;

改變軟應用回收時間:-XX:SoftRefLRUPolicyMSPerMB=3000

診斷引用回收引起的內存問題:-XX:+PrintReferenceGC

通過底層API設置對象為強引用:Reference.reachabilityFence(this);一般用在異步編程場景。

小結

本節分析了4種引用的可達性和垃圾回收的場景。然後進行了一些擴展;
最有價值的是診斷引用引起的內存問題調整jvm參數;可以打印回收的數據和調整軟引用的回收時間週期;

面試刷題4:強 弱 軟 幻象 引用的區別?


分享到:


相關文章: