執行引擎是Java虛擬機非常最核心的部分,對於物理即的執行引擎是直接建立在處理器、硬件、指令集合操作系統層面,而虛擬機執行引擎則是由自行定制的指令集與執行引擎的結構體系。執行引擎在執行Java會有解釋執行(通過解釋器)和編譯執行(通過JIT生成的本地代碼)兩種選擇,對於Android ART又多了一種提前編譯器(AOT)。
接下來,主要講解虛擬機的方法執行過程,對於Java虛擬機的解釋器的執行模型(不考慮異常處理):
do {
atomically calculate pc and fetch opcode at pc;
if (operands) fetch operands;
execute the action for the opcode;
} while (there is more to do);
對象創建,不包括數組和Class對象,例如 Person person = new Person()
,
當虛擬機遇到new指令時:
從虛擬機角度,到此一個新的對象已經創建完成。但從Java視角,對象才剛剛開始,init構造方法還沒有執行,所有字段還是零。執行完init方法,按java程序的構造方法進行初始化後,對象便是徹底創建完成。