在看java的ThreadLocal的源碼實(shí)現(xiàn)時(shí)鸭栖,涉及到了弱引用晶丘,對于這種引用方式,并不太常用到跛十,翻看各種博客文檔彤路,將java的各種引用總結(jié)如下:
1.強(qiáng)引用
User user = new User();
· 1
在我們?nèi)粘>幋a中,使用最廣的引用方式芥映。
只要強(qiáng)引用還存在洲尊,對象就不會(huì)被垃圾回收器回收。
可以通過將引用置空的方式奈偏,讓JVM回收該對象坞嘀。
2.軟引用
SoftReference ref = new SoftReference(new User();
· 1
有用但是并非必須的對象可以使用弱引用。
對于軟引用關(guān)聯(lián)著的對象惊来,只有在內(nèi)存不足的時(shí)候JVM才會(huì)回收該對象姆吭。
因此,這一點(diǎn)可以很好地用來解決OOM的問題唁盏。
3.弱引用
WeakReference ref = new WeakReference(new User();
· 1
只具有弱引用的生命周期較軟引用更加短暫。
垃圾回收器線程掃描發(fā)現(xiàn)了只具有弱引用的對象检眯,不管當(dāng)前內(nèi)存空間是否足夠厘擂,都會(huì)回收它的內(nèi)存。
因此锰瘸,弱引用更適合想緩存數(shù)據(jù)刽严,又不想影響對象收集的地方。ThreadLocal中的ThreadLocalMap采用的即是弱引用作為Key避凝。
4.虛引用(幻影引用)
PhantomReference ref = new PhantomReference(new User(), referenceQueue);
· 1
顧名思義舞萄,該應(yīng)用并不能獲取到任何對象,也不會(huì)影響對象生命周期管削。
虛引用必須和引用隊(duì)列聯(lián)合使用倒脓,虛引用主要用來跟蹤對象被垃圾回收的活動(dòng)。