運算元棧的位元組碼指令執行分析
阿新 • • 發佈:2020-10-08
一:寫個demo
二:點選Recompile編譯
三:使用javap命令反編譯class檔案 javap -v 類名.class
四:檢視結果
五:分析執行過程
首先bipush意思是把byte型別的變數i的值15存放到運算元棧中,istore_1的意思是把運算元棧中int型別的i的值取出來存放到區域性變量表中索引為1的位置,為什麼一開始就從索引1開始存的,因為這個方法不是靜態方法,區域性變量表的索引0位置存放了this,接著運算元棧就沒有了,i出棧了,接著bipush 8的意思是把8放到運算元為索引0的位置上,接著istore_2的意思是把運算元棧中的8存放到區域性變量表索引為2的位置上,iload_1和iload_2指令的意思是把區域性變量表中索引為1和2位置的資料依次取出來,放到運算元棧中,接下來進行iadd操作,接著出棧,這個位元組碼指令被執行引擎翻譯成機器指令,然後被cpu執行,由cpu運算,把8和15相加的和23,接著23放到了運算元棧中,istore_3意思是把23以int型別儲存到區域性變量表中索引為3的位置上,最後因為方法沒有其他操作,沒有返回值,最後return結束
(byte,short,char,boolean 都以int型來儲存)