Java的強弱軟虛引用,面試總結與詳解

這篇博客主要用於記錄和總結看到的一些比較好的關於強弱軟虛引用的知識點,用於面試,會附上參考博客。

總結

總結博客參考:總結鏈接

JDK1.2之前只有強引用,其他幾種引用都是在JDK1.2之後引入的.

  • 強引用(Strong Reference) 最常用的引用類型,如Object obj = new Object(); 。只要強引用存在則GC時則必定不被回收,即使由於內存不足而拋出異常。如果想要將其回收,需要賦值null。如ArrayList的clear方法。

  • 軟引用(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方法已經被調用了之後,這個對象的幽靈引用會被加入到隊列中。通過檢查該隊列裏面的內容就知道一個對象是不是已經準備要被回收了. 虛引用和軟引用和弱引用都不同,虛引用必須和引用隊列聯合使用,它會在內存沒有清理的時候被加入引用隊列

詳解鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章