readme
0.1)本文總結於 clas位元組碼檔案,旨在理清 class位元組碼檔案的大體結構;
乾貨開始
對上圖的分析(analysis):
a1)offset=0
a2)offset=0xb0,儲存類索引+父類索引+介面索引
a3)offset=0xb6(查表6-8),儲存字段資訊
a4)offset=0xc0,儲存方法資訊(查表6-11)
a5)offset=0xd0,儲存code屬性的資訊,如下圖所示:
a6)後面我偷個懶,還有一些屬性的位元組碼表示:剛剛介紹了code屬性,接下來是 exceptions屬性,linenumbertable屬性,localvariabletable屬性,sourcefile屬性, constantvalue屬性, innerclass屬性, deprecated和synthetic屬性,stackmaptable屬性,signature屬性,和 bootstrapmethods 屬性等, 它們的截圖示例如下:
conconsion)總結下class位元組碼檔案格式的大致結構(排名分先後)(非常重要):
jvm 位元組碼執行流程
1 源 public class mytest 2 編譯後的位元組碼檔案 3 載入 1 常量池中的位元組碼載入到執行時常量池 2 方法的位元組碼載入到方法區 4 main執行緒開始執行,分配棧楨記憶體 1 棧記憶體的分配 區域性變數表 4 最大運算元棧的深度為 2 2 執行istore 1指令 將常...
JVM之虛擬機器位元組碼執行引擎
執行時棧幀結構 棧幀儲存方法的區域性變數表 運算元棧 動態鏈結和方法返回位址等,每乙個方法由開始到結束,都對應著乙個棧幀在虛擬機器裡面的出棧入棧過程。對於執行引擎來說,在活動的執行緒中,只有位於棧頂的棧幀才有效,叫做當前棧幀,與這個棧幀相關聯的方法叫做當前方法。區域性變數表 是一組變數值儲存空間,存...
位元組碼與常量池和JVM記憶體原理
1.jvm主要包括了圖中的三塊,分別是方法區,堆,以及執行緒獨有的區域。2.其中方法區中包括了類變數,類資訊,方法資訊以及常量池。1.常量池以表的形式存在 2.常量池用於儲存編譯期間生成的字面量和符號引用。值得注意的是,執行期間產生的新的常量也可被儲存到常量池中,例如string中的intern方法...