深入理解JVM(8)——类加载的时机
一、類的生命周期
二、類加載的時機
a)??????? 加載、驗證、準備、初始化是按照先后順序依次執行的
b)??????? 解析過程會發生在初始化過程中
a)??????? 在類加載過程中遇到如下指令(new、getstatic、putstatic、invokestatic),如果當前的類尚未初始化,那么就要進行初始化。分別對應的Java代碼場景為:
b)??????? 使用Java.lang.reflect進行發射調用的時候,如果這個類沒有被初始化,那么就要先進行初始化
c)??????? 當初始化一個類時,如果這個類的父類還沒有被初始化,那么先初始化這個類的父類,再初始化這個類
d)??????? 當虛擬機啟動的時候,虛擬機會首先初始化帶有main方法的類
JVM虛擬機規范中要求在程序運行過程中,“當且僅當”出現上述4個條件之一的情況才會初始化一個類。如果間接滿足上述初始化條件是不會初始化類的。其中,直接滿足上述初始化條件的情況叫做主動引用;間接滿足上述初始化過程的情況叫做被動引用。
那么,只有當程序在運行過程中滿足主動引用的時候才會初始化一個類,若滿足被動引用就不會初始化一個類。
類和接口都需要初始化,他們初始化的過程大致相同,不同點在于:類初始化過程中如果發現該類的父類尚未被初始化,那么會先初始化父類,然后再初始化這個類;但是接口初始化的時候,并不要求父類已經全部初始化,當程序運行過程中需要用到父類的東西的時候在初始化父類接口。
轉載于:https://www.cnblogs.com/BaoZiY/p/10632227.html
總結
以上是生活随笔為你收集整理的深入理解JVM(8)——类加载的时机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Webshell免杀绕过waf
- 下一篇: 网络流小结