是JDK1.2版本開(kāi)始引入,把對象的引用分為4個(gè)等級,我們平時(shí)學(xué)習的就是四種的第一級的強引用,說(shuō)白了,就Object o = new Object(),四個(gè)引用分別是強引用、軟引用、弱引用和虛引用,請記住它們的順序!因為這是它們對內存的敏感程度!等級: 強 > 軟 > 弱 > 虛
靈活的控制對象的生命周期
提高對象的回收機率
理論加代碼分析:
1.什么是強引用
強引用就是我們平時(shí)使用的對象方式,也是使用最多的一種方式,請記住不管內存緊張也罷,不足也罷,gc永不回收強引用的對象, 即使jvm出現(內存溢出錯誤)OutOfMemoryError,使程序停止,也不會(huì )回收對象來(lái)提高內存.
代碼
1. 什么是軟引用
對象具備軟引用,請記住,只要內存足夠,我們不對對象回收,但是當內存不足, gc對軟引用對象進(jìn)行回收 可以看出軟引用對內存很敏感,可用來(lái)高速緩存,同時(shí)它可以結合隊列使用,如果軟引用被gc回收,jvm就會(huì )把軟引用加入到隊列中。
代碼
3. 什么是弱引用?
gc不內存是發(fā)現弱引用,就會(huì )立刻回收弱引用對象,但是我們知道gc是一個(gè)優(yōu)先級很低的線(xiàn)程,所以不一定立刻發(fā)現并回收弱引用對象,但記住,只要被gc發(fā)現弱引
用,不管內存夠不夠,直接回收,同時(shí),弱引用,也可以結合隊列使用,當被回收,就進(jìn)入與之關(guān)聯(lián)的隊列中
代碼
4. 什么是虛引用?
虛引用和前面的軟引用、弱引用不同,它并不影響對象的生命周期。在java中用java.lang.ref.PhantomReference類(lèi)表示。如果一個(gè)對象與虛引用關(guān)聯(lián),則跟沒(méi)有引用與之關(guān)聯(lián)一樣,在任何時(shí)候都可能被垃圾回收器回收。
要注意的是,虛引用必須和引用隊列關(guān)聯(lián)使用,當垃圾回收器準備回收一個(gè)對象 時(shí),如果發(fā)現它還有虛引用,就會(huì )把這個(gè)虛引用加入到與之 關(guān)聯(lián)的引用隊列中。程序可以通過(guò)判斷引用隊列中是否已經(jīng)加入了虛引用,來(lái)了解被引用的對象是否將要被垃圾回 收。如果程序發(fā)現某個(gè)虛引用已經(jīng)被加入到引用隊列,那么就可以在所引用的對象的內 存被回收之前采取必要的行動(dòng)。
聯(lián)系客服