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