JVM框架結構
執行Main.class的順序
-
先通過類裝載系統把文件字節碼裝載到方法區
-
再通過字節碼執行引擎執行相關代碼
完整 JVM 構成的三個部分
- 類裝載子系統
- 運行時數據區(內存模型)
- 字節碼執行引擎
淺談堆
大家學過jdk之後,估計都知道它存放的都是new出來的對象
,深一點就會知道伊甸園,倖存者區和老年代
,還有gc
等等
淺談棧
棧又叫虛擬機棧或線程棧,當執行一個方法時,會開闢一塊棧幀,裏面主要存放一些局部變量
,操作數棧,動態連接,方法出口
,執行完方法後彈棧.
淺談本地方法棧
底層有C語言實現,C語言是所有語言的前輩,爲java虛擬機提供Native方法
虛擬機棧和本地方法棧的區別
本地方法棧與虛擬機棧的作用完全一樣,在HotSpot虛擬機中,本地方法棧與虛擬機棧是同一塊內存區域。
他倆的區別無非是:
- 本地方法棧爲虛擬機使用的Native方法服務,
- 而虛擬機棧爲JVM執行的Java方法服務。
淺談程序計數器
- 計數器記錄的是正在執行的虛擬機字節碼指令的地址;
- 如果正在執行的是一個Native方法,這個計數器值爲空
簡單的說,就是看程序執行到第幾行
淺談方法區
它用於存儲已被虛擬機加載的類信息、常量、靜態變量
、即編譯器編譯後的代碼等數據
淺談常量池
運行時常量池是方法區的一部分,存放字面量與符號引用