2.引用
2.1 強引用,譬如Object obj=new Object(),只要強引用存在,垃圾收集器永遠不會回收被引用的對象
2.2 軟引用,表示還有用但並需必須的對象,對於軟引用關聯的對象,在系統將要發生內存溢出異常之前,將會把這些對象列進回收範圍之中進行第二次回收。
2.3弱引用,描述非必需對象,被弱引用關聯的對象只能生存到下一次垃圾收集發生之前。
2.4虛引用,完全不會對其生存時間構成影響,唯一的目的就是能在這個對象被收集器回收的時候收到一個系統通知
強引用>軟引用>弱引用>虛引用
3.生存還是死亡
在可達性分析算法中發現對象從GC root中不可達,也並非是直接被回收,還要經過兩次標記才能宣告真正的死亡。
1.對象不可達------->-判斷是否有必要執行finalize()方法----------->判斷有必要執行時,將對象加入F-Queue隊列之中(如果不執行,就只能死亡了)------>虛擬機自動建立低優先級的Finalizer線程去執行(只是觸發finalize方法,但是並不承諾等待他執行完成)----->GC標記F-Queue隊列的對象,如果在finalize方法中重新與引用連上的任何一個對象簡歷關聯,則移除,否則被回收。