前言
1、概述
1.基本概念
JVM是可運行Java代碼的假想計算機,包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收、堆和一個存儲方法域。JVM 是運行在操做系統之上的,它與硬件沒有直接交互。java
運行過程: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%的內存消耗。jvm
5.指令集架構
6.java體系結構圖
SPECjvm2008:基準測試套件。它是測試用例涵蓋了大部分Java基礎應用場景,是架構選型和jvm性能評測不可多得的利器。性能
第一章 JVM運行時數據區
jvm運行時數據區,即Java內存結構。測試
jvm被分爲三個主要的子系統:操作系統
- 1.類加載器子系統
- 2.運行時數據區
- 3.執行引擎
Java本地機(JNI):JNI將於本地方法庫進行交互,並提供執行引擎所需的本地庫;
本地方法庫:它是執行引擎所需的本地庫的集合;線程
程序計數器(Program Counter Register)
定義:指針
程序計數器是一塊較小的內存空間,能夠看做是當前線程所執行的字節碼行號指示器,也可稱之爲PC寄存器;字節碼解釋器工做時經過改變程序計數器的值來選取下一條須要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都須要依賴這個計數器來完成。cdn
特性:blog
- 在任何肯定的時刻,一個處理器(對於多核處理器是一個內核)都只會執行一條線程中的指令;
- 每條線程都有一個獨立的線程計數器(各條線程之間的計數器互不影響,獨立存儲);
- Java方法:則這個計數器記錄的是正在執行的虛擬機字節碼指令的地址
- Native方法:計數器值爲空(Undefined)
- 此內存區域是惟一在Java虛擬機規範中沒有規定任何OutOfMemoryError的區域;
- PC寄存器是對物理PC寄存器的一種抽象模擬,線程私有,生命週期與線程的生命週期保持一致
程序計數器爲何是線程私有的?
Java虛擬機棧(Java Virtual Machine Stacks)