麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

虛擬機字節碼執行引擎

2019-11-14 12:51:15
字體:
來源:轉載
供稿:網友

我們知道,javac編譯器完成了程序代碼經過詞法分析、語法分析到抽象語法樹、再遍歷語法樹生成線性的字節碼指令流的過程。而字節碼文件再經過加載、驗證、準備、解析、初始化等階段才能被使用。字節碼執行引擎正是執行了這樣的過程:輸入的是字節碼文件,處理過程是字節碼解析的等效過程,輸出的是執行結果。

運行時棧幀結構

棧幀(stack frame)是用于支持虛擬機進行方法調用和方法執行的數據結構,它是虛擬機運行時數據區中的虛擬機棧的棧元素。棧中存儲了方法的局部變量表、操作數棧、動態鏈接和方法返回地址等信息。每一個方法從調用開始到執行完成的過程,就對應著一個棧幀在虛擬機棧里面從入棧到出棧的過程。 在編譯程序代碼的時候,棧幀中需要多大的局部變量表、多深的操作數棧都已經完全確定了,并且寫入到方法表的Code屬性之中,因此一個棧幀需要分配多少內存,不會受到程序運行期變量數據的影響,而僅僅取決于具體的虛擬機實現。 注:對于執行引擎來講,活動線程中,只有棧頂的棧幀是有效的,稱為當前棧幀,這個棧幀所關聯的方法稱為當前方法執行引擎所運行的所有字節碼指令都只是針對當前棧幀進行操作。

局部變量表

一組變量值存儲空間,用于存放方法參數和方法內部定義的局部變量。 局部變量表的容量以變量槽為最小單位,每個slot都應該能存放一個boolean,byte,short,int,char,float,reference,returnAddress類型的數據,對于64位的數據類型只有double,long兩種(reference可能為32位也可能為64位),這兩種類型占用兩個slot。 虛擬機是使用局部變量表完成參數值到參數變量列表的傳遞過程,如果是實例方法(非static)那么局部變量表中第0位索引的slot默認是用于傳遞方法所屬對象實例的引用,方法中可以通過this來訪問這個隱含的參數。其余參數則按照參數表的順序來排列,占用從1開始的局部變量slot,參數表分配完畢之后,再根據方法體內部定義的變量順序和作用域分配其余的slot。 注:類變量有兩次賦值的過程,一次在準備階段,賦予系統初始值(比如int默認值為0,boolean默認值為false,object類型默認值為null等),另外一次在初始化階段,賦予程序員定義的初始值。因此即使在初始化階段程序員沒有為類變量賦值也沒用關系,類變量仍然具有一個確定的初始值。但是局部變量若是定義了但沒有賦初始值是沒法使用的,類加載將會失敗。

操作數棧

操作數棧是用來存放操作數的棧結構。當一個方法剛開始執行的時候,這個方法的操作數棧是空的,在方法的執行過程中,會有各種字節碼指令向操作數棧中寫入和提取內容,也就是入棧和出棧的操作。 注:java虛擬機的解釋執行引擎稱為基于棧的執行引擎,其中所指的棧就是操作數棧。

動態連接

每個棧幀都包含一個指向運行時常量池中該棧幀所屬方法的引用,持有這個引用是為了支持方法調用過程中的動態連接。我們知道class文件的常量池中存有大量的符號引用,字節碼中的方法調用指令就以常量池中指向方法的符號引用為參數。這些符號引用一部分會在類加載階段或第一次使用的時候轉化為直接引用,這種轉化為稱為靜態解析,另外一部分將在每一次的運行期間轉化為直接引用,這部分稱為動態連接。

方法返回地址

方法被執行后,有兩種方式退出這個方法。第一種方法是執行引擎遇到任意一個方法的返回的字節碼指令。另外一種退出方式是在方法執行過程中遇到了異常,并且這個異常并沒有在方法體中得到處理。方法退出之后,需要返回到方法被調用的位置,程序才能繼續執行,方法返回時需要在棧幀中保存一些信息,用以幫助它恢復它上層方法的執行狀態。一般情況下,調用者的pc計數器的值可以作為返回地址,棧幀中很可能會保存這個計數器值,方法異常退出時,返回地址是要通過異常處理器表來確定,棧幀中一般不會保存這部分信息。

方法退出的過程實際上等同于把當前棧幀出棧,所以可能需要執行這些操作:恢復上層方法的局部變量表和操作數棧,把返回值壓入調用者棧的操作數棧中,調整pc計數器的值。 附加信息:虛擬機規范允許具體的虛擬機實現增加一些規范里沒有描述的信息到棧幀中,這部分信息取決于具體的虛擬機實現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人精品一区二区 | 精品一区二区三区在线播放 | 亚洲日本韩国精品 | 久久精品一二三区白丝高潮 | 黄色毛片免费看 | avav在线播放 | 最新一级毛片 | 美女视频免费一区二区 | 97精品国产高清在线看入口 | 成人短视频在线播放 | 欧美一级精品片在线看 | 91社区电影 | 亚洲四播房 | 国产午夜亚洲精品午夜鲁丝片 | 久久蜜桃精品一区二区三区综合网 | 成人在线免费观看网址 | 久久99在线 | 久久国产秒 | 成人免费福利视频 | 国产精品午夜未成人免费观看 | xxxxhd73国产| 亚洲成人免费电影 | 偿还电影免费看 | 欧美日韩亚洲精品一区二区三区 | 精品一区久久久 | 国产一区二区视频精品 | 神马福利网 | 最新午夜综合福利视频 | 欧美18一12sex性处hd | va免费视频| 成人不卡一区二区 | 中文字幕国产亚洲 | 久久精品成人免费国产片桃视频 | 草久影视 | www.9191.com | 免费观看在线 | 黄色大片网 | 久久久成人精品视频 | 99sesese| 久久艹精品视频 | 国产88久久久国产精品免费二区 |