java引用漫談
jdk1.2以前,如果reference類型的數據中存儲的數值代表的是另外一塊內存的起始地址,就稱這塊內存代表着一個引用。這種情況下,一個對象只有被引用或沒有被引用兩種狀態。
jdk1.2以後,Java對引用概念進行了擴充,將引用分爲強引用、軟引用、弱引用、虛引用四種。強度依次減弱。
引用的細分使得Java對內存回收的控制也更精細。
強引用
Object obj = new Object(); 只要引用存在,gc就不會回收被引用的對象。
軟引用
用來描述還有用但不必需的對象。在系統將要發生內存溢出之前,列入回收範圍進行回收。但如果內存足夠,就不會回收。
如果這次回收還沒有足夠的內存,纔會拋出內存溢出的異常。
弱引用
描述非必需對象,但比弱引用更弱。
只能生存到下一次垃圾收集發生之前。無論內存是否足夠,都會回收。
虛引用
又名幽靈引用或幻影引用,是最弱的一種引用關係。一個對象是否有虛引用存在,對其生存時間沒有任何影響。
爲一個對象設置虛引用的唯一目的就是能在對象被gc回收前收到一個系統通知。