(二)虛擬機棧 筆記

 

目錄

虛擬機棧概述

棧的存儲結構和運行原理

棧楨的內部結構

字節碼中方法內部結構的剖析

mian方法解析 

幀棧內部結構之---局部變量表

變量槽slot的理解與演示

幀棧內部結構之---操作數棧

操作數棧的特點

涉及操作數棧的字節碼指令執行分析

幀棧內部結構之---動態鏈接

動態鏈接的理解與常量池的作用

幀棧內部結構之---方法返回地址


 

 

虛擬機棧概述

每個線程會創建一個虛擬機棧,其內部保存一個個的棧幀,對應着一次次的Java方法調用,生命週期和線程一樣

 優點是跨平臺,指令集小,編譯器容易實現,缺點是性能下降,實現同樣的功能需要更多的指令

它主要保存局部變量(8種基本數據類型,對象的引用地址),部分結果,並參與方法的調用和返回

棧是一種快速有效的分配存儲方式,訪問速度僅次於程序計數器,每個方法的執行伴隨着出棧和進棧,不存在垃圾回收問題

棧的存儲結構和運行原理

 

棧中存儲的是什麼

棧運行原理

棧楨的內部結構

字節碼中方法內部結構的剖析

需要在IDEA添加一個插件 jclasslib  

mian方法解析 

 

ByteCode:字節碼指令 

Exception table :拋出的異常  

 Misc:  Codec length:字節碼指令長度  Maximum local variables: 局部變量最大的長度是3(3個局部變量)

 局部變量字節碼指令行號

length 表示該局部變量在方法中的範圍(start PC 和length加起來16表示  因爲這個方法字節碼指令長度也爲16))  

 

如果是非靜態方法會有一個 this 的局部變量被創建 ,這也是爲什麼靜態方法中不允許使用this,因爲不存在this這個變量

幀棧內部結構之---局部變量表

變量槽slot的理解與演示

 

 

 Index  表示的是 局部變量表中solt的索引 可以看到double 是佔據的兩個solt

幀棧內部結構之---操作數棧

操作數棧的特點

 

涉及操作數棧的字節碼指令執行分析

幀棧內部結構之---動態鏈接

動態鏈接的理解與常量池的作用

 

Constant Pool  :class文件常量池

這就是所謂的動態鏈接

動態鏈接就是指向運行時常量池的方法引用

 

幀棧內部結構之---方法返回地址

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章