卸載
關(guān)于類(lèi)的卸載,筆者在單例模式討論篇:?jiǎn)卫J脚c垃圾回收一文中有過(guò)描述,在類(lèi)使用完之后,如果有下面的情況,類(lèi)就會(huì)被卸載:
該類(lèi)所有的實(shí)例都已經(jīng)被回收,也就是java堆中不存在該類(lèi)的任何實(shí)例。
加載該類(lèi)的ClassLoader已經(jīng)被回收。
該類(lèi)對(duì)應(yīng)的java.lang.Class對(duì)象沒(méi)有任何地方被引用,無(wú)法在任何地方通過(guò)反射訪問(wèn)該類(lèi)的方法。
如果以上三個(gè)條件全部滿足,jvm就會(huì)在方法區(qū)垃圾回收的時(shí)候?qū)︻?lèi)進(jìn)行卸載,類(lèi)的卸載過(guò)程其實(shí)就是在方法區(qū)中清空類(lèi)信息,java類(lèi)的整個(gè)生命周期就結(jié)束了。
總結(jié)
做java的朋友對(duì)于對(duì)象的生命周期可能都比較熟悉,對(duì)象基本上都是在jvm的堆區(qū)中創(chuàng)建,在創(chuàng)建對(duì)象之前,會(huì)觸發(fā)類(lèi)加載(加載、連接、初始化),當(dāng)類(lèi)初始化完成后,根據(jù)類(lèi)信息在堆區(qū)中實(shí)例化類(lèi)對(duì)象,初始化非靜態(tài)變量、非靜態(tài)代碼以及默認(rèn)構(gòu)造方法,當(dāng)對(duì)象使用完之后會(huì)在合適的時(shí)候被jvm垃圾收集器回收。讀完本文后我們知道,對(duì)象的生命周期只是類(lèi)的生命周期中使用階段的主動(dòng)引用的一種情況(即實(shí)例化類(lèi)對(duì)象)。而類(lèi)的整個(gè)生命周期則要比對(duì)象的生命周期長(zhǎng)的多。
更多信息請(qǐng)查看IT技術(shù)專欄