Java代碼編譯時期是將Java文件編譯為Class文件。
Java代碼執(zhí)行時期:
裝載
- JVM通過類的全限定名獲取描述此類的.class文件,通過該文件將類的信息加載到JVM方法區(qū),然后在堆中實例化一個java.lang.Class對象,作為方法區(qū)中這個類的入口。
連接
- 驗證,確認(rèn)類型符合Java語言的語義,并且不會危及JVM的完整性
- 準(zhǔn)備,為類變量(Static變量)分配內(nèi)存,設(shè)置初值(通過內(nèi)存清零實現(xiàn),此階段不執(zhí)行Java代碼),final修飾的常量初始值就是Java代碼中的初始值
- 解析,在類的常量池中尋找類,接口,方法和字段的符號引用,將符號引用替換為直接引用
初始化
- 為類變量賦予Java代碼中的初始值
對象生命
類可以被使用了。調(diào)用類變量,類方法,實例化類等。實例化類會創(chuàng)建一個新的對象,開啟該對象的生命周期。對象生命周期:
- 對象實例化,在堆中為對象分配內(nèi)存,清零,賦予正確的初始值
- 垃圾收集,當(dāng)對象不再被引用的時候
- 對象終結(jié),被垃圾收集后
類卸載
- 將類的內(nèi)存空間清空