前言
一、概述
1.基本概念
JVM是可執行Java程式碼的假想計算機,包括一套位元組碼指令集、一組暫存器、一個棧、一個垃圾回收、堆和一個儲存方法域。JVM 是執行在作業系統之上的,它與硬體沒有直接互動。
執行過程:Java原始檔->編譯器->位元組碼檔案->JVM->機器碼
2.當前主流的JVM
- HotSpot :sun公司的
- J9 :IBM公司的
- JRockit : BEA公司的
3.JVM主要子系統
- 類載入器子系統(Class Lodaer Subsystem)
- 執行時資料區(Runtime Data Area)
- 執行引擎(Execution Engine)
4.64位JVM
由於指標膨脹和各種資料型別對齊補充的原因,執行於64位系統上的JAVA應用需要消耗更多的記憶體空間,通常要比32位系統額外增加10%~30%的記憶體消耗。
5.指令集架構
- ARM
- x86
- x64
- Sparc
6.java體系結構圖
SPECjvm2008:基準測試套件。它是測試用例涵蓋了大部分Java基礎應用場景,是架構選型和jvm效能評測不可多得的利器。
第一章 JVM執行時資料區
jvm執行時資料區,即Java記憶體結構。
jvm被分為三個主要的子系統:
- 1.類載入器子系統
- 2.執行時資料區
- 3.執行引擎
本地方法庫:它是執行引擎所需的本地庫的集合;
程式計數器(Program Counter Register)
定義:
程式計數器是一塊較小的記憶體空間,可以看作是當前執行緒所執行的位元組碼行號指示器,也可稱之為PC暫存器;位元組碼直譯器工作時通過改變程式計數器的值來選取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。
特性:
- 在任何確定的時刻,一個處理器(對於多核處理器是一個核心)都只會執行一條執行緒中的指令;
- 每條執行緒都有一個獨立的執行緒計數器(各條執行緒之間的計數器互不影響,獨立儲存);
- Java方法:則這個計數器記錄的是正在執行的虛擬機器位元組碼指令的地址
- Native方法:計數器值為空(Undefined)
- 此記憶體區域是唯一在Java虛擬機器規範中沒有規定任何OutOfMemoryError的區域;
- PC暫存器是對物理PC暫存器的一種抽象模擬,執行緒私有,生命週期與執行緒的生命週期保持一致
程式計數器為什麼是執行緒私有的?