Java(十)這麼簡單的對象生命週期你都不會?

對象的生命週期

Java對象在JVM中的運行週期大致上分爲七個階段,創建階段(Creation)、應用階段(Using)、不可視階段(Invisible)、不可到達階段(Unreachable)、可收集階段(Collected)、終結階段(Finalized)與釋放階段(Free)

用了那麼久的Java對象,怎麼可能不把它的生命週期搞清楚嘞?下面我將對每個階段進行介紹

1

創建階段

一個對象想要進入創建階段,前提是它的類文件必須已經加載到內存中,並且創建了Class對象,這樣才能根據類信息進行創建

創建的過程

  1. 爲對象在堆中分配內存空間

  2. 構造對象。從最頂層父類開始對局部變量賦值

  3. 從最頂層的父類開始往下調用構造方法

創建一個對象的注意點

  1. 不要在循環中創建對象。避免反覆創建帶來的消耗

  2. 不要讓類的繼承關係太深。避免遞歸調用父類方法帶來的消耗

創建完成之後就會進入應用階段

2

應用階段

引用階段就是這個對象發揮價值的階段,通俗點說,就是這個對象有被使用、有被其他對象引用

這裏可以看一下我的這一篇文章:Java(九)Java中有四種引用你知道嗎?希望你不是最後一個知道的

四種引用:

  1. 強引用

  2. 軟引用

  3. 弱引用

  4. 虛引用

3

不可視階段

不可視階段中,對象是存在且被引用的,但是這個引用在接下來的代碼中並沒有使用到(也可能是因爲作用域限制了),這就造成了內存的冗餘。

所以我們在使用完一個對象之後,或者這個對象就在這個作用域內,那就要在結束的時候,將該對象的引用改成null,讓JVM及時回收這個對象

4

不可達階段

當一個對象沒有在被強引用時,就會進入不可達階段,在這個階段中,對象隨時會被回收,這由JVM中的垃圾回收器來決定

5

可收集階段

當對象到了不可達階段後,垃圾處理器也做好了對該對象的內存空間重新分配的準備,那麼就會進入到收集階段,如果對象重寫了finalize()方法,則會去執行finalize()方法,儘量不要重寫finalize()方法,避免影響垃圾回收器的回收和讓對象重新回到應用階段

收集階段緊接着就是終結階段

6

終結階段

到了終結階段,對象就不可能再回到應用階段了,只能等待被垃圾回收期回收

7

釋放階段

這是垃圾回收的最後一步了,也是對象死亡的階段,此時的對象所佔用的內存空間已經被回收或者重新分配了,對象也不存在了

最後

以上就是對象生命週期的整個過程,如果想了解類的生命週期可以去看我的這一篇文章????JVM(三·上)一篇文章讓你徹底瞭解類加載器

掃碼關注我

微信號 : cxy_xuxiaojian

微信上也能看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章