對象的生命週期
Java對象在JVM中的運行週期大致上分爲七個階段,創建階段(Creation)、應用階段(Using)、不可視階段(Invisible)、不可到達階段(Unreachable)、可收集階段(Collected)、終結階段(Finalized)與釋放階段(Free)
用了那麼久的Java對象,怎麼可能不把它的生命週期搞清楚嘞?下面我將對每個階段進行介紹
1
創建階段
一個對象想要進入創建階段,前提是它的類文件必須已經加載到內存中,並且創建了Class對象,這樣才能根據類信息進行創建
創建的過程:
爲對象在堆中分配內存空間
構造對象。從最頂層父類開始對局部變量賦值
從最頂層的父類開始往下調用構造方法
創建一個對象的注意點:
不要在循環中創建對象。避免反覆創建帶來的消耗
不要讓類的繼承關係太深。避免遞歸調用父類方法帶來的消耗
創建完成之後就會進入應用階段
2
應用階段
引用階段就是這個對象發揮價值的階段,通俗點說,就是這個對象有被使用、有被其他對象引用
這裏可以看一下我的這一篇文章:Java(九)Java中有四種引用你知道嗎?希望你不是最後一個知道的
四種引用:
強引用
軟引用
弱引用
虛引用
3
不可視階段
不可視階段中,對象是存在且被引用的,但是這個引用在接下來的代碼中並沒有使用到(也可能是因爲作用域限制了),這就造成了內存的冗餘。
所以我們在使用完一個對象之後,或者這個對象就在這個作用域內,那就要在結束的時候,將該對象的引用改成null,讓JVM及時回收這個對象
4
不可達階段
當一個對象沒有在被強引用時,就會進入不可達階段,在這個階段中,對象隨時會被回收,這由JVM中的垃圾回收器來決定
5
可收集階段
當對象到了不可達階段後,垃圾處理器也做好了對該對象的內存空間重新分配的準備,那麼就會進入到收集階段,如果對象重寫了finalize()方法,則會去執行finalize()方法,儘量不要重寫finalize()方法,避免影響垃圾回收器的回收和讓對象重新回到應用階段
收集階段緊接着就是終結階段
6
終結階段
到了終結階段,對象就不可能再回到應用階段了,只能等待被垃圾回收期回收
7
釋放階段
這是垃圾回收的最後一步了,也是對象死亡的階段,此時的對象所佔用的內存空間已經被回收或者重新分配了,對象也不存在了
最後
以上就是對象生命週期的整個過程,如果想了解類的生命週期可以去看我的這一篇文章????JVM(三·上)一篇文章讓你徹底瞭解類加載器
掃碼關注我
微信號 : cxy_xuxiaojian
微信上也能看