Java 將引用分為強引用言询、軟引用环戈、弱引用、虛引用4種逗柴,這4種引用強度依次逐漸減弱蛹头。
- 強引用就是指在程序代碼中普遍存在的,類似“Object obj = new Object()”這類的引用戏溺,只要強引用還存在渣蜗,垃圾收集器永遠不會回收掉被引用的對象。
- 軟引用是用來描述一些還有用但并非必需的對象旷祸。對于軟引用關(guān)聯(lián)著的對象耕拷,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常之前,將會把這些對象列進回收范圍之內(nèi)進行第二次回收托享。如果這次回收還沒有足夠的內(nèi)存骚烧,才會拋出內(nèi)存溢出異常。
- 弱引用也是用來描述非必需對象的闰围,但是它的強度比軟引用更弱一些赃绊,被弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾收集發(fā)生之前。當垃圾收集器工作時羡榴,無論當前內(nèi)存是否足夠碧查,都會回收掉只被弱引用關(guān)聯(lián)的對象。
- 虛引用是最弱的一種引用關(guān)系校仑。一個對象是否有虛引用的存在忠售,完全不會對其生存時間構(gòu)成影響,也無法通過虛引用來取得一個對象實例迄沫。為一個對象設置虛引用關(guān)聯(lián)的唯一目的就是能在這個對象被收集器回收時收到一個系統(tǒng)通知稻扬。