JVM系列筆記目錄
- 虛擬機的基礎概念
- class檔案結構
- class檔案加載程序
- jvm記憶體模型
- JVM常用指令
- GC與調優
指令集分類
基于暫存器的指令集
基于堆疊的指令集
Hotspot中的Local Variable Table相當于JVM的暫存器
運行時資料區
運行時資料區分6個部分: PC、JVM Stack、Heap、MethodArea、Native Method Stack、Direct Memory,

-
PC: 程式計數器,存放下一條指令的位置,
-
JVM Stack:執行緒獨有的堆疊,存放一個個堆疊幀(Stack Frame,每個方法對應一個堆疊幀,
堆疊幀組成:
- Local Variable Table 方法本地的引數表
- Operand Stack 運算元堆疊
- Dynamic Linking 動態鏈接,簡單理解為指向Runtime Constant Pool中的符號鏈接;如果沒有解釋,將符號參考決議為直接參考的程序;如果已解釋,直接用,感興趣可以閱讀下 Oracle官方JVM規范,
- Return address,回傳地址,a() -> b(),方法a呼叫了方法b, b方法的回傳值放在什么地方
-
Heap:所有執行緒共享的堆空間,具體在GC的章節探討,
-
MethodArea:方法區,執行緒共享
-
存放每一個class的結構
-
方法區是邏輯上的概念,1.8前后有不同實作
1.8版本前指的是永久代,字串常量位于PermSpace,FGC不會清理,大小啟動的時候指定,不能變,
1.8后指的是元資料區(Meta Space),字串常量位于堆,會觸發FGC清理,不設定的話,就是最大的物理記憶體
-
方法區中包含RunTime Constant Pool,是class中的常量池中的資料運行時存放的地方
-
-
Native Method Stack:呼叫了C/C++本地方法的堆疊,
-
Direct Memory:JVM可以直接訪問的內核空間的記憶體(OS管理的記憶體),使用NIO,提高效率,實作零拷貝,
運行時資料中PC、JVM Stack、Native Method Stack是執行緒獨有的,而Heap、Method Area則是執行緒共享的,

-
JVM常用指令
如何查看指令的含義?idea中通過插件jclasslib直接點擊指令查看,或是查閱JVM規范,
-
store 存入LVT
-
load 從LVT取
-
pop彈堆疊
-
add 加法
-
mul乘法
-
sub減法
-
invoke
? InvokeStatic呼叫靜態方法
? InvokeVirtual呼叫可以多型的方法
? InvokeInterface呼叫介面方法
? InvokeSpecial呼叫可以直接定位,不需要多型的方法如private 方法、構造方法
? InvokeDynamic呼叫lambda運算式或者反射或者其他動態語言scala kotlin,或者CGlib ASM,動態產生的類會用到的指令,JVM最難的指令
-
知識分享,轉載請注明出處,學無先后,達者為先!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/169928.html
標籤:其他
上一篇:vector專題
下一篇:模擬的草地
