《深刻理解JVM虛擬機》一書中提到了Java中的4種引用,分別是強引用、軟引用、弱引用、虛引用,爲何要分這麼多種引用呢?這是由於每一種引用的生命週期都不相同,準確的說垃圾收集器對其處理的方式有區別。對象
1.強引用:好比Object obj = new Object(),建立一個對象obj,這屬於強引用,咱們平時所說的「引用」,其實就是指「強引用」,只要強引用還存在,垃圾收集器就永遠不會回收被引用的對象;生命週期
2.軟引用(SoftReference):描述一些還有用,但並不是必須的對象。對於軟引用關聯着的對象,在系統將要發生內存溢出以前,將會把這些對象列進回收範圍再次進行回收,若是回收完後尚未足夠的內存,纔會拋出內存溢出異常;內存
3.弱引用(WeakReference):也是用來描述一些非必需的對象,強度比軟引用更弱一些,被弱引用關聯的對象只能生存到下一次垃圾收集發生以前。當垃圾收集器工做時,不管當前內存是否足夠,都會回收掉只被弱引用關聯的對象;虛擬機
4.虛引用(PhantomReference):最弱的引用關係,一個對象是否有虛引用的存在,徹底不會對其生存時間構成影響,也沒法經過虛引用來取得一個對象實例。虛引用的功能是:爲一個對象設置虛引用的惟一目的就是能在這個對象被垃圾收集器回收時收到一個系統通知;引用
其實上面雖然對於每一種引用作了介紹,只是對於概念上有一些瞭解,可是,哪些地方在用,應該怎麼用,這是一個問題,後面有機會補充一下。異常