目錄
1. 創建階段(Created)
- 為對象分配存儲空間
- 開始構造對象
- 從父類到子類對static成員進行初始化
- 父類成員變量按照順序初始化,遞歸調用父類的構造方法
- 子類成員變量按照順序初始化,子類構造方法調用
一旦對象被創建,並有某個引用指向它,這個對象的狀態就切換到了應用階段(In Use)
2. 應用階段(In Use)
對象至少被一個強引用持有並且對象在作用域內
3. 不可見階段(Invisible)
程序本身不再持有該對象的任何強引用,但是這些引用可能還存在着;
一般具體是指程序的執行已經超過該對象的作用域了
4. 不可達階段(Unreachable)
該對象不再被任何強引用所持有;
可能仍被JVM等系統下的某些已經裝載的驚天變靈或者線程或JNI所持有,這些特殊的強引用被稱為GC root,這種情況容易導致內存泄露,無法被回收
5. 收集階段(Collected)
對象不可達,並且GC已經准備好對該對象占用的內存空間重新分配的時候,處於手機階段。
如果重寫了finazlie()
方法,則會去執行該方法。
盡量不要重寫finazlie()方法,因為有可能影響JVM的對象分配與回收速度或者可能造成該對象的再次復活
6. 終結階段
當對象執行完finalize()
方法之后,仍然處於不可達狀態時,則該對象進入終結階段。在這個階段,內存空間等待GC進行回收
7. 對象空間的重新分配
GC對該對象占有的內存空間進行回收或者再分配,該對象徹底消失