潭州學院百戰(zhàn)程序員之java對象的幾種引用方式

在看java的ThreadLocal的源碼實現(xiàn)時,涉及到了弱引用,對于這種引用方式,并不太常用到,翻看各種博客文檔,將java的各種引用總結如下:

1.強引用

User user = new User();

· 1

在我們日常編碼中,使用最廣的引用方式。

只要強引用還存在,對象就不會被垃圾回收器回收。

可以通過將引用置空的方式,讓JVM回收該對象。

2.軟引用

SoftReference ref = new SoftReference(new User();

· 1

有用但是并非必須的對象可以使用弱引用。

對于軟引用關聯(lián)著的對象,只有在內存不足的時候JVM才會回收該對象。

因此,這一點可以很好地用來解決OOM的問題。

3.弱引用

WeakReference ref = new WeakReference(new User();

· 1

只具有弱引用的生命周期較軟引用更加短暫。

垃圾回收器線程掃描發(fā)現(xiàn)了只具有弱引用的對象,不管當前內存空間是否足夠,都會回收它的內存。

因此,弱引用更適合想緩存數(shù)據(jù),又不想影響對象收集的地方。ThreadLocal中的ThreadLocalMap采用的即是弱引用作為Key。

4.虛引用(幻影引用)

PhantomReference ref = new PhantomReference(new User(), referenceQueue);

· 1

顧名思義,該應用并不能獲取到任何對象,也不會影響對象生命周期。

虛引用必須和引用隊列聯(lián)合使用,虛引用主要用來跟蹤對象被垃圾回收的活動。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容