在Java中類是有生命周期的,那么一個類的生命周期什么樣,有多久?接下來小編就與大家共同了解一下類的生命周期。Java源文件編譯成的class字節(jié)碼文件,在Java虛擬機中運行,Java類的生命周期就是指一個class文件從加載到卸載的全過程。
1.加載:找到需要加載的類并把類的信息加載到jvm的方法區(qū)中,然后在堆區(qū)中實例化一個Java.lang.Class對象,作為方法區(qū)中這個類的信息的入口。Ps:日常我們說的類加載——指的是類的生命周期中加載、連接、初始化三個階段。
2.連接:連接階段比較復雜,一般會跟加載階段和初始化階段交叉進行,這個階段的主要任務就是做一些加載后的驗證工作以及一些初始化前的準備工作。
3.類的初始化:按照順序自上而下運行類的變量賦值語句和靜態(tài)語句。而沒有static修飾的賦值語句和執(zhí)行語句在實例化對象的時候才會運行。
所以,Java的靜態(tài)變量也叫做類變量,它開始于類的創(chuàng)建,結束于類的消亡。非靜態(tài)變量叫做實例變量,它開始于類的實例的創(chuàng)建,結束語類的實例的消亡。
4.使用:當初始化完成之后,Java虛擬機就可以執(zhí)行Class的業(yè)務邏輯指令,通過堆中Java.lang.Class對象的入口地址,調用方法區(qū)的方法邏輯,最后將方法的運算結果通過方法返回地址存放到方法區(qū)或堆中。
類的使用包括主動引用和被動引用。主動引用會引起類的初始化eg:通過new關鍵字實例化對象、讀取或設置類的靜態(tài)變量。被動引用不會引起類的初始化eg:定義類數(shù)組、引用類的常量。
5.卸載:當對象不再被使用時,Java虛擬機的垃圾收集器將會回收堆中的對象,方法區(qū)中不再被使用的Class也要被卸載,否則方法區(qū)(Sun HotSpot永久代)會內存溢出。類的卸載過程其實就是在方法區(qū)中清空類信息。
更多資訊盡在動力節(jié)點官方網站,關注《動力節(jié)點Java學院》微信平臺,獲取全新Java知識