JVM體系之執行引擎

jopen 12年前發布 | 2K 次閱讀 Tcl


一、JVM通過執行引擎來完成字節碼的執行,在執行過程中JVM采用的是自己的一套指令系統,每個線程在創建后,都會產生一個程序計數器(pc)和棧(Stack)。

其中pc中存放了下一條將要執行的指令;

Stack中存放Stack Frame,表示的為當前正在執行的方法,每個方法的執行都會產生Stack Frame,Stack Frame中存放了傳遞給方法的參數方法內的局部變量以及操作數棧;

操作數棧用于存放指令運算的中間結果;

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

當方法執行完畢后則從Stack中彈出,繼續其他方法的執行。

 

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

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

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

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

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

 

二、執行技術

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

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

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

(3)自適應優化:(目前Sun的HotspotJVM采用這種技術)則吸取第一代JVM和第二代JVM的經驗,采用兩者結合的方式。開始對所有的 代碼都采取解釋執行的方式,并監視代碼執行情況,然后對那些經常調用的方法啟動一個后臺線程,將其編譯為本地代碼,并進行仔細優化。若方法不再頻繁使用, 則取消編譯過的代碼,仍對其進行解釋執行;

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

 

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!