Java對象的生命周期

在Java中镜沽,對象的生命周期包括以下幾個階段:

  1. 創(chuàng)建階段(Created)
  2. 應(yīng)用階段(In Use)
  3. 不可見階段(Invisible)
  4. 不可達(dá)階段(Unreachable)
  5. 收集階段(Collected)
  6. 終結(jié)階段(Finalized)
  7. 對象空間重分配階段(De-allocated)

Java對象生命周期列表

1. 創(chuàng)建階段(Created)

在創(chuàng)建階段系統(tǒng)通過下面的幾個步驟來完成對象的創(chuàng)建過程

  • 為對象分配存儲空間
  • 開始構(gòu)造對象
  • 從超類到子類對static成員進(jìn)行初始化
  • 超類成員變量按順序初始化春缕,遞歸調(diào)用超類的構(gòu)造方法
  • 子類成員變量按順序初始化挎塌,子類構(gòu)造方法調(diào)用

一旦對象被創(chuàng)建,并被分派給某些變量賦值车酣,這個對象的狀態(tài)就切換到了應(yīng)用階段

2. 應(yīng)用階段(In Use)

對象至少被一個強引用持有著曲稼。

3. 不可見階段(Invisible)

當(dāng)一個對象處于不可見階段時索绪,說明程序本身不再持有該對象的任何強引用,雖然該這些引用仍然是存在著的贫悄。
簡單說就是程序的執(zhí)行已經(jīng)超出了該對象的作用域了瑞驱。
舉例如下圖:本地變量count在25行時已經(jīng)超出了其作用域,則在此時稱之為count處于不可視階段窄坦。當(dāng)然這種情況編譯器在編譯的過程中會直接報錯了钱烟。

        boolean has = false;
        while (has) {
            int count = 0;
            count ++;
        }
        
        //1
        System.out.println(count);

4. 不可達(dá)階段(Unreachable)

對象處于不可達(dá)階段是指該對象不再被任何強引用所持有。
與“不可見階段”相比嫡丙,“不可見階段”是指程序不再持有該對象的任何強引用,這種情況下读第,該對象仍可能被JVM等系統(tǒng)下的某些已裝載的靜態(tài)變量或線程或JNI等強引用持有著曙博,這些特殊的強引用被稱為”GC root”。存在著這些GC root會導(dǎo)致對象的內(nèi)存泄露情況怜瞒,無法被回收父泳。

5. 收集階段(Collected)

當(dāng)垃圾回收器發(fā)現(xiàn)該對象已經(jīng)處于“不可達(dá)階段”并且垃圾回收器已經(jīng)對該對象的內(nèi)存空間重新分配做好準(zhǔn)備時,則對象進(jìn)入了“收集階段”吴汪。如果該對象已經(jīng)重寫了finalize()方法惠窄,則會去執(zhí)行該方法的終端操作。
這里要特別說明一下:不要重載finazlie()方法漾橙!原因有兩點:

會影響JVM的對象分配與回收速度

在分配該對象時杆融,JVM需要在垃圾回收器上注冊該對象,以便在回收時能夠執(zhí)行該重載方法霜运;在該方法的執(zhí)行時需要消耗CPU時間且在執(zhí)行完該方法后才會重新執(zhí)行回收操作脾歇,即至少需要垃圾回收器對該對象執(zhí)行兩次GC。

可能造成該對象的再次“復(fù)活”

在finalize()方法中淘捡,如果有其它的強引用再次持有該對象藕各,則會導(dǎo)致對象的狀態(tài)由“收集階段”又重新變?yōu)椤皯?yīng)用階段”。這個已經(jīng)破壞了Java對象的生命周期進(jìn)程焦除,且“復(fù)活”的對象不利用后續(xù)的代碼管理激况。

6. 終結(jié)階段

當(dāng)對象執(zhí)行完finalize()方法后仍然處于不可達(dá)狀態(tài)時,則該對象進(jìn)入終結(jié)階段膘魄。在該階段是等待垃圾回收器對該對象空間進(jìn)行回收乌逐。

7. 對象空間重新分配階段

垃圾回收器對該對象的所占用的內(nèi)存空間進(jìn)行回收或者再分配了,則該對象徹底消失了瓣距,稱之為“對象空間重新分配階段”黔帕。

轉(zhuǎn)載:
Java 對象的生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹈丸,隨后出現(xiàn)的幾起案子成黄,更是在濱河造成了極大的恐慌呐芥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奋岁,死亡現(xiàn)場離奇詭異思瘟,居然都是意外死亡,警方通過查閱死者的電腦和手機闻伶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門滨攻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蓝翰,你說我怎么就攤上這事光绕。” “怎么了畜份?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵诞帐,是天一觀的道長。 經(jīng)常有香客問我爆雹,道長停蕉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任钙态,我火速辦了婚禮慧起,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘册倒。我一直安慰自己蚓挤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布驻子。 她就那樣靜靜地躺著屈尼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拴孤。 梳的紋絲不亂的頭發(fā)上脾歧,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音演熟,去河邊找鬼鞭执。 笑死,一個胖子當(dāng)著我的面吹牛芒粹,可吹牛的內(nèi)容都是我干的兄纺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼化漆,長吁一口氣:“原來是場噩夢啊……” “哼估脆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起座云,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤疙赠,失蹤者是張志新(化名)和其女友劉穎付材,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體圃阳,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡厌衔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捍岳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片富寿。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锣夹,靈堂內(nèi)的尸體忽然破棺而出页徐,到底是詐尸還是另有隱情,我是刑警寧澤银萍,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布泞坦,位于F島的核電站,受9級特大地震影響砖顷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赃梧,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一滤蝠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧授嘀,春花似錦物咳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷折,卻和暖如春压鉴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锻拘。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工油吭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人署拟。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓婉宰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親推穷。 傳聞我的和親對象是個殘疾皇子心包,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容