執行引擎子系統——JVM之五

1、JVM經過執行引擎來完成字節碼的執行,在執行過程當中JVM採用的是本身的一套指令系統,每一個線程在建立後,都會產生一個程序計數器(pc)和棧(Stack)。優化

pc:存放了下一條將要執行的指令;spa

Stack:存放Stack Frame(棧幀),最上面的表示爲當前正在執行的方法。每一個方法的執行都會產生Stack Frame,Stack Frame中存放了傳遞給方法的參數、方法內的局部變量以及操做數棧;線程

局部變量表:存放參數、局部變量;對象

操做數棧:存放指令運算的中間結果;接口

指令負責從操做數棧中彈出參與運算的操做數,指令執行完畢後再將計算結果壓回到操做數棧;內存

當方法執行完畢後則從Stack中彈出,繼續其餘方法的執行。ci

 

在執行方法時JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四種指令來執行get

(1)invokestatic:調用類的static方法it

(2) invokevirtual: 調用對象實例的方法編譯

(3) invokeinterface:將屬性定義爲接口來進行調用

(4) invokespecial: JVM對於初始化對象(Java構造器的方法爲:<init>)以及調用對象實例中的私有方法時。

 

 

2、執行技術

主要的執行技術有:解釋,即時編譯,自適應優化、芯片級直接執行

(1)解釋:屬於第一代JVM;

(2)即時編譯:JIT屬於第二代JVM;

(3)自適應優化:(目前Sun的HotspotJVM採用這種技術)則吸收第一代JVM和第二代JVM的經驗,採用二者結合的方式。開始對全部的 代碼都採起解釋執行的方式,並監視代碼執行狀況,而後對那些常常調用的方法啓動一個後臺線程,將其編譯爲本地代碼,並進行仔細優化。若方法再也不頻繁使用, 則取消編譯過的代碼,仍對其進行解釋執行;

(4)芯片級直接執行:內嵌在芯片上,用本地方法執行Java字節碼。

 

想深刻了解JVM內存分配,請結合 http://hllvm.group.iteye.com/group/wiki/3053-JVM 這篇文章

相關文章
相關標籤/搜索