Java对象生命周期
目錄
- 1. 創(chuàng)建階段(Created)
- 2. 應(yīng)用階段(In Use)
- 3. 不可見(jiàn)階段(Invisible)
- 4. 不可達(dá)階段(Unreachable)
- 5. 收集階段(Collected)
- 6. 終結(jié)階段
- 7. 對(duì)象空間的重新分配
1. 創(chuàng)建階段(Created)
- 為對(duì)象分配存儲(chǔ)空間
- 開(kāi)始構(gòu)造對(duì)象
- 從父類(lèi)到子類(lèi)對(duì)static成員進(jìn)行初始化
- 父類(lèi)成員變量按照順序初始化,遞歸調(diào)用父類(lèi)的構(gòu)造方法
- 子類(lèi)成員變量按照順序初始化,子類(lèi)構(gòu)造方法調(diào)用
一旦對(duì)象被創(chuàng)建,并有某個(gè)引用指向它,這個(gè)對(duì)象的狀態(tài)就切換到了應(yīng)用階段(In Use)
2. 應(yīng)用階段(In Use)
對(duì)象至少被一個(gè)強(qiáng)引用持有并且對(duì)象在作用域內(nèi)
3. 不可見(jiàn)階段(Invisible)
程序本身不再持有該對(duì)象的任何強(qiáng)引用,但是這些引用可能還存在著;
一般具體是指程序的執(zhí)行已經(jīng)超過(guò)該對(duì)象的作用域了
4. 不可達(dá)階段(Unreachable)
該對(duì)象不再被任何強(qiáng)引用所持有;
可能仍被JVM等系統(tǒng)下的某些已經(jīng)裝載的驚天變靈或者線(xiàn)程或JNI所持有,這些特殊的強(qiáng)引用被稱(chēng)為GC root,這種情況容易導(dǎo)致內(nèi)存泄露,無(wú)法被回收
5. 收集階段(Collected)
對(duì)象不可達(dá),并且GC已經(jīng)準(zhǔn)備好對(duì)該對(duì)象占用的內(nèi)存空間重新分配的時(shí)候,處于手機(jī)階段。
如果重寫(xiě)了finazlie()方法,則會(huì)去執(zhí)行該方法。
盡量不要重寫(xiě)finazlie()方法,因?yàn)橛锌赡?strong>影響JVM的對(duì)象分配與回收速度或者可能造成該對(duì)象的再次復(fù)活
6. 終結(jié)階段
當(dāng)對(duì)象執(zhí)行完finalize()方法之后,仍然處于不可達(dá)狀態(tài)時(shí),則該對(duì)象進(jìn)入終結(jié)階段。在這個(gè)階段,內(nèi)存空間等待GC進(jìn)行回收
7. 對(duì)象空間的重新分配
GC對(duì)該對(duì)象占有的內(nèi)存空間進(jìn)行回收或者再分配,該對(duì)象徹底消失
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Java对象生命周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ 标准函数库 —— 文件的输入输出
- 下一篇: Java 基础——类的加载