中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM操作數棧的方法是什么

發布時間:2022-01-05 17:15:42 來源:億速云 閱讀:128 作者:iii 欄目:云計算

這篇文章主要介紹“JVM操作數棧的方法是什么”,在日常操作中,相信很多人在JVM操作數棧的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JVM操作數棧的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

和局部變量區一樣,操作數棧也是被組織成一個以字長為單位的數組。但是和前者不同的是,它不是通過索引來訪問,而是通過標準的棧操作—壓棧和出棧—來訪問的。比如,如果某個指令把一個值壓入到操作數棧中,稍后另一個指令就可以彈出這個值來使用。

虛擬機在操作數棧中存儲數據的方式和在局部變量區中是一樣的:如int、long、float、double、reference和returnType的存儲。對于byte、short以及char類型的值在壓入到操作數棧之前,也會被轉換為int。

不同于程序計數器,Java虛擬機沒有寄存器,程序計數器也無法被程序指令直接訪問。Java虛擬機的指令是從操作數棧中而不是從寄存器中取得操作數的,因此它的運行方式是基于棧的而不是基于寄存器的。雖然指令也可以從其他地方取得操作數,比如從字節碼流中跟隨在操作碼(代表指令的字節)之后的字節中或從常量池中,但是主要還是從操作數棧中獲得操作數。

虛擬機把操作數棧作為它的工作區——大多數指令都要從這里彈出數據,執行運算,然后把結果壓回操作數棧。比如,iadd指令就要從操作數棧中彈出兩個整數,執行加法運算,其結果又壓回到操作數棧中,看看下面的示例,它演示了虛擬機是如何把兩個int類型的局部變量相加,再把結果保存到第三個局部變量的:

begin
iload_0 // push the int in local variable 0 onto the stack
iload_1 // push the int in local variable 1 onto the stack
iadd // pop two ints, add them, push result
istore_2 // pop int, store into local variable 2

在這個字節碼序列里,前兩個指令iload_0和iload_1將存儲在局部變量中索引為0和1的整數壓入操作數棧中,其后iadd指令從操作數棧中彈出那兩個整數相加,再將結果壓入操作數棧。第四條指令istore_2則從操作數棧中彈出結果,并把它存儲到局部變量區索引為2的位置。圖5-10詳細表述了這個過程中局部變量和操作數棧的狀態變化,圖中沒有使用的局部變量區和操作數棧區域以空白表示。
JVM操作數棧的方法是什么

到此,關于“JVM操作數棧的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

稻城县| 军事| 广汉市| 顺义区| 南雄市| 汕头市| 梅州市| 新干县| 浪卡子县| 永年县| 松桃| 广昌县| 东至县| 南昌县| 富川| 焉耆| 兴宁市| 永寿县| 古蔺县| 左贡县| 洛阳市| 隆尧县| 广州市| 鲁甸县| 乡宁县| 万州区| 乐都县| 玛纳斯县| 肥东县| 上杭县| 武冈市| 涪陵区| 贞丰县| 贡觉县| 许昌县| 井研县| 安阳市| 阿拉善右旗| 辽阳县| 丰台区| 华阴市|