
什么是操作數棧?
- 與局部變量表一樣,均以字長為單位的數組。不過局部變量表用的是索引,操作數棧是彈棧/壓棧來訪問。操作數棧可理解為java虛擬機棧中的一個用於計算的臨時數據存儲區。
- 存儲的數據與局部變量表一致含int、long、float、double、reference、returnType,操作數棧中byte、short、char壓棧前(bipush)會被轉為int。
- 數據運算的地方,大多數指令都在操作數棧彈棧運算,然后結果壓棧。
- java虛擬機棧是方法調用和執行的空間,每個方法會封裝成一個棧幀壓入占中。其中里面的操作數棧用於進行運算,當前線程只有當前執行的方法才會在操作數棧中調用指令(可見java虛擬機棧的指令主要取於操作數棧)。
- int類型在-1~5、-128~127、-32768~32767、-2147483648~2147483647范圍分別對應的指令是iconst、bipush、sipush、ldc(這個就直接存在常量池了)
