1. 程式人生 > >java虛擬機器資料收集整理

java虛擬機器資料收集整理

轉載: http://www.cnblogs.com/zhanglei93/p/6590609.html


對運算元棧的補充說明:

運算元棧
      Java虛擬機器的解釋執行引擎被稱為"基於棧的執行引擎",其中所指的棧就是指-運算元棧。
      運算元棧也常被稱為操作棧。
     和區域性變數區一樣,運算元棧也是被組織成一個以字長為單位的陣列。但是和前者不同的是,它不是通過索引來訪問,而是通過標準的棧操作—壓棧和出棧—來訪問的。比如,如果某個指令把一個值壓入到運算元棧中,稍後另一個指令就可以彈出這個值來使用。
      虛擬機器在運算元棧中儲存資料的方式和在區域性變數區中是一樣的:如int、long、float、double、reference和returnType的儲存。對於byte、short以及char型別的值在壓入到運算元棧之前,也會被轉換為int。

      虛擬機器把運算元棧作為它的工作區——大多數指令都要從這裡彈出資料,執行運算,然後把結果壓回運算元棧。比如,iadd指令就要從運算元棧中彈出兩個整數,執行加法運算,其結果又壓回到運算元棧中,看看下面的示例,它演示了虛擬機器是如何把兩個int型別的區域性變數相加,再把結果儲存到第三個區域性變數的:

      在這個位元組碼序列裡,前兩個指令iload_0和iload_1將儲存在區域性變數中索引為0和1的整數壓入運算元棧中,其後iadd指令從運算元棧中彈出那兩個整數相加,再將結果壓入運算元棧。第四條指令istore_2則從運算元棧中彈出結果,並把它儲存到區域性變數區索引為2的位置。下圖詳細表述了這個過程中區域性變數和運算元棧的狀態變化,圖中沒有使用的區域性變數區和運算元棧區域以空白表示。