本篇及相關的幾篇文章是《深入理解 Java 虛擬機:JVM 高級特性與最佳實踐(第 2 版)》(周志明,機械工業(yè)出版社)這本書的讀書筆記,文章中多使用思維導圖列出一些章節(jié)中的知識點。感謝原書作者的精彩撰寫,歡迎對 Java 虛擬機感興趣的讀者閱讀原書。
本人從事 Android 開發(fā)多年,讀這本書,作為對過去所學相關知識的系統(tǒng)梳理和總結。個人感覺這本書是一些表面代碼的深入解釋,以及解決一些問題或運用一些技術的行動指南。讀完這本書,對一些東西的看法猶如從黑盒子中躍入光明世界。
如果本篇文章的讀者發(fā)現(xiàn)有錯誤或不足的地方,歡迎評論區(qū)指出。
8.1 概述
執(zhí)行引擎是 Java 虛擬機最核心的組成部分之一。“虛擬機” 是一個相對于 “物理機”的概念,這兩種機器都有代碼執(zhí)行能力,其區(qū)別是物理機的執(zhí)行引擎是直接建立在處理器、硬件、指令集和操作系統(tǒng)層面上的,而虛擬機的執(zhí)行引擎是由自己實現(xiàn)的,因此可以自行制定指令集與執(zhí)行引擎的結構體系,而且能夠執(zhí)行那些不被硬件直接支持的指令集格式。
8.2 運行時棧幀結構

運行時棧幀結構.png
棧幀的概念結構

棧幀的概念結構
8.3 方法調(diào)用

方法調(diào)用.png
8.4 基于棧的字節(jié)碼解釋執(zhí)行引擎
說明虛擬機是如何執(zhí)行方法中的字節(jié)碼指令的。

基于棧的字節(jié)碼解釋執(zhí)行引擎.png
編譯過程

編譯過程