大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java虛擬機棧是什么

Java虛擬機棧是什么

更新時間:2021-05-17 11:13:18 來源:動力節點 瀏覽892次

何為虛擬機棧

虛擬機棧的棧元素是棧幀,當有一個方法被調用時,代表這個方法的棧幀入棧;當這個方法返回時,其棧幀出棧。因此,虛擬機棧中棧幀的入棧順序就是方法調用順序。什么是棧幀呢?棧幀可以理解為一個方法的運行空間。它主要由兩部分構成,一部分是局部變量表,方法中定義的局部變量以及方法的參數就存放在這張表中;另一部分是操作數棧,用來存放操作數。我們知道,Java 程序編譯之后就變成了一條條字節碼指令,其形式類似匯編,但和匯編有不同之處:匯編指令的操作數存放在數據段和寄存器中,可通過存儲器或寄存器尋址找到需要的操作數;而 Java 字節碼指令的操作數存放在操作數棧中,當執行某條帶 n 個操作數的指令時,就從棧頂取 n 個操作數,然后把指令的計算結果(如果有的話)入棧。因此,當我們說 JVM 執行引擎是基于棧的時候,其中的“棧”指的就是操作數棧。舉個簡單的例子對比下匯編指令和 Java 字節碼指令的執行過程,比如計算 1 + 2,在匯編指令是這樣的:

mov ax, 1 ;把 1 放入寄存器 ax add ax, 2 ;用 ax 的內容和 2 相加后存入 ax

而 JVM 的字節碼指令是這樣的:

iconst_1 //把整數 1 壓入操作數棧 iconst_2 //把整數 2 壓入操作數棧 iadd //棧頂的兩個數相加后出棧,結果入棧

由于操作數棧是內存空間,所以字節碼指令不必擔心不同機器上寄存器以及機器指令的差別,從而做到了平臺無關。

注意,局部變量表中的變量不可直接使用,如需使用必須通過相關指令將其加載至操作數棧中作為操作數使用。比如有一個方法 void foo(),其中的代碼為:int a = 1 + 2; int b = a + 3;,編譯為字節碼指令就是這樣的:

iconst_1 //把整數 1 壓入操作數棧 iconst_2 //把整數 2 壓入操作數棧 iadd //棧頂的兩個數出棧后相加,結果入棧;實際上前三步會被編譯器優化為:iconst_3 istore_1 //把棧頂的內容放入局部變量表中索引為 1 的 slot 中,也就是 a 對應的空間中 iload_1 // 把局部變量表索引為 1 的 slot 中存放的變量值(3)加載至操作數棧 iconst_3 iadd //棧頂的兩個數出棧后相加,結果入棧 istore_2 // 把棧頂的內容放入局部變量表中索引為 2 的 slot 中,也就是 b 對應的空間中 return // 方法返回指令,回到調用點

需要說明的是,局部變量表以及操作數棧的容量的最大值在編譯時就已經確定了,運行時不會改變。并且局部變量表的空間是可以復用的,例如,當指令的位置超出了局部變量表中某個變量 a 的作用域時,如果有新的局部變量 b 要被定義,b 就會覆蓋 a 在局部變量表的空間。

盜用別人的圖以讓大家對虛擬機棧有個直觀的認識(其中小字體 Stack 指的的是虛擬機棧,Frame 是棧幀,Local variables 是局部變量表,Operand Stack 是操作數棧):

Java虛擬機棧是什么

以上就是動力節點小編介紹的"Java虛擬機棧是什么",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 特大一级aaaaa毛片 | 欧美洲久久日韩欧美 | 久久国产精品成人免费 | 99精品免费观看 | 久久久久国产成人精品 | 国产91在线播放 | 一区二区三区在线播放 | 中文字幕在线观看国产 | 天天干天天曰天天操 | 国产国拍亚洲精品午夜不卡17 | 亚洲瑟瑟 | 亚洲国产日产韩国欧美综合 | 亚洲精品911| 狠狠色成人综合网图片区 | 亚洲一区二区免费在线观看 | 看黄色免费网站 | 久久www免费人成高清 | 久久国产乱子伦精品免费一 | 天天色天天草 | 国产亚洲精品自在久久不卡 | 香蕉久久成人网 | 国内精品久久久久久久影视麻豆 | 免费国产成人高清在线观看麻豆 | 老色鬼久久综合第一 | 国产精品久久二区三区色裕 | jizzjizz中国护士第一次 | 亚洲欧洲视频在线 | 四虎影院观看视频 | 91精品国产爱久久久久久 | 亚洲视频91 | 欧美黄色第一页 | 亚洲精品亚洲人成毛片不卡 | 中文日韩字幕一区在线观看 | 久久久久久国产精品免费免费 | 天天干天天草 | 亚洲毛片 | 色老头网站久久网 | 99在线视频免费观看 | 中文字幕欧美一区 | 99热久久国产精品免费观看 | 亚洲一区二区三区日本久久九 |