Java中幾個Reference常見的作用詳解
前言
Java中幾個Reference作用,也是面試的時候經(jīng)常問到的問題,以前總是記一次忘一次,現(xiàn)在有時間,索性寫個demo測試一把。下面來一起看看詳細(xì)的介紹:
具體代碼如下:

JVM 參數(shù): -Xmx10m -Xms5m -XX:+PrintGC
SoftReference的時候:

weakReference的時候:

StrongReference:
由于strong是JVM默認(rèn)的,這里就不做了,直接就是一點都不會被回收,直至OOM
PhantomReference:
虛引用并不會改變內(nèi)存回收機制,只是在回收的時候放到ReferenceQueue里通知用戶可做一些額外操作,比如打印日志等
如下代碼,本質(zhì)上byte[]還是一個強引用的。

輸出:

總結(jié)一下:
- StrongReference:JVM默認(rèn),除非GC時已無任何對象引用,否則即便是OOM也不會回收
- WeakReference:一旦沒有被引用,GC時就會回收
- SoftReference:和strong一樣,除非GC時已無任何對象引用,否則....在即將OOM前才會被回收,所以SoftReference一般可以用來做緩存
- sun.nio.ch.Util中就有private static ThreadLocal<SoftReference<SelectorWrapper>> localSelector
- = new ThreadLocal<SoftReference<SelectorWrapper>>();
- 用于臨時的Selector。
- PhantomReference:通過構(gòu)造函數(shù)的ReferenceQueue作為一個通知,用來在對象被回收時做額外的操作。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Go Java算法之外觀數(shù)列實現(xiàn)方法示例詳解
這篇文章主要為大家介紹了Go Java算法外觀數(shù)列實現(xiàn)的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java實戰(zhàn)之實現(xiàn)文件資料上傳并生成縮略圖
這篇文章主要介紹了通過Java實現(xiàn)文件資料的上傳并生成一個縮略圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴可以了解一下2021-12-12
如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化
對于二次開發(fā)來說,很大一部分就找找文件和找數(shù)據(jù)庫的變化情況,下面這篇文章主要給大家介紹了關(guān)于如何通過Java監(jiān)聽MySQL數(shù)據(jù)的變化的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03

