一、生命周期

- 創建階段(Created):創建Java對象
- 為對象分配內存空間。
- 構造對象。
- 從超類到子類對static成員進程初始化,類的static成員的初始化在ClassLoader加載該類時進行。
- 超類成員變量按順序初始化化,遞歸調用超類的構造函數。
- 子類成員變量按順序初始化,一旦對象被創建,子類的構造函數就調用該對象並為一些變量賦值。完成以上這些后對象的狀態就切換到了應用階段InUse。
- 應用階段(InUse):對象至少被一個強引用持有,除非顯示的使用軟引用、弱引用、虛引用。
- 不可見階段(Invisible):不可見階段的對象在虛擬機的對象根引用集合中再也找不到直接或者間接的強引用,最常見的就是線程或者函數中的臨時變量。
- 不可達階段(Unreachable):指對象不再被任何強引用持有,GC發現該對象已經不可達。
- 收集階段(Collected):GC發現對象處於不可達階段並且GC已經對該對象的內存空間重新分配做好准備,對象進程收集階段。如果,該對象的finalize()函數被重寫,則執行該函數。
- 終結階段(Finalized):對象的finalize()函數執行完成后,對象仍處於不可達狀態,該對象進程終結階段。
- 對象內存空間重新分配階段(Deallocaled):GC對該對象占用的內存空間進行回收或者再分配,該對象徹底消失。
