Java對象生命週期

1. 建立階段(Created)

  • 爲對象分配存儲空間
  • 開始構造對象
  • 從父類到子類對static成員進行初始化
  • 父類成員變量按照順序初始化,遞歸調用父類的構造方法
  • 子類成員變量按照順序初始化,子類構造方法調用
    一旦對象被建立,並有某個引用指向它,這個對象的狀態就切換到了應用階段(In Use)

2. 應用階段(In Use)

對象至少被一個強引用持有而且對象在做用域內code

3. 不可見階段(Invisible)

程序自己再也不持有該對象的任何強引用,可是這些引用可能還存在着;
通常具體是指程序的執行已經超過該對象的做用域對象

4. 不可達階段(Unreachable)

該對象再也不被任何強引用所持有;
可能仍被JVM等系統下的某些已經裝載的驚天變靈或者線程或JNI所持有,這些特殊的強引用被稱爲GC root,這種狀況容易致使內存泄露,沒法被回收遞歸

5. 收集階段(Collected)

對象不可達,而且GC已經準備好對該對象佔用的內存空間從新分配的時候,處於手機階段。
若是重寫了finazlie()方法,則會去執行該方法。內存

儘可能不要重寫finazlie()方法,由於有可能影響JVM的對象分配與回收速度或者可能形成該對象的再次復活作用域

6. 終結階段

當對象執行完finalize()方法以後,仍然處於不可達狀態時,則該對象進入終結階段。在這個階段,內存空間等待GC進行回收it

7. 對象空間的從新分配

GC對該對象佔有的內存空間進行回收或者再分配,該對象完全消失class

相關文章
相關標籤/搜索