JVM的位置
)
一些JVM
- SUN Classic
- Exact VM
- HotSpot VM :HotSpot指熱點代碼探測技術
- BEA JRockit:(BEA 已被Oracle收購) 專一於服務端應用,世界最快的jvm之一
- IBM J9
- Taobao JVM: 目前已經在淘寶、天貓上線,替換了Oracle官方JVM;
- Graal VM: Oracle 2018年4月公開,口號 Run Programs Faster Anywhere.最可能替代HotSpot的產品
Android虛擬機 DVM
- 谷歌開發,基於Android,在2.2中提供了JIT
- 只能稱做虛擬機 不能稱爲java虛擬機,他沒有遵循Java虛擬機規範
- 基於寄存器架構,效率高,可是跟硬件耦合度比較高
- 不能直接執行class文件,執行的是dex文件
- 5.0使用支持提早編譯的ART VM替換Dalvik VM
.java 源文件經過前端編譯器(如javac) 編譯成.class字節碼文件 由後端編譯器(java Api,JVM)解釋執行
類裝載:加載-->連接-->初始化 前端
java代碼執行流程
java程序--(編譯)-->字節碼文件--(解釋執行)-->操做系統(Win,Linux,Mac JVM)java
棧的指令集架構和寄存器的指令集架構
因爲跨平臺的設計,java的指令都是根據棧來設計的,不一樣平臺CPU架構不一樣,因此不能設計爲基於寄存器的
棧:跨平臺性、指令集小、指令多;執行性比寄存器差
寄存器:指令少git
//查看指令集命令代碼
cd out/production/類根目錄
javap -v StackStruTest.class
//打印程序執行的進程
jps
複製代碼
jvm生命週期
1.啓動
經過引導類加載器(bootstrap class loader)建立一個初始類(initial class)來完成的,這個類是由虛擬機的具體實現指定的.github
2.執行
- 一個運行中的java虛擬機有着一個清晰的任務:執行Java程序;
- 程序開始執行的時候他才運行,程序結束時他就中止;
- 執行一個所謂的Java程序的時候,真真正正在執行的是一個叫作Java虛擬機的進程。
3.退出
- 程序正常執行結束
- 程序異常或錯誤而異常終止
- 操做系統錯誤致使終止
- 某線程調用Runtime類或System類的exit方法,或Runtime類的halt方法,而且java安全管理器也容許此次exit或halt操做
- 除此以外,JNI規範描述了用JNI Invocation API來加載或卸載Java虛擬機時,Java虛擬機的退出狀況
JVM學習代碼及筆記(陸續更新中...)
【代碼】
github.com/willShuhuan…
【筆記】
JVM_01 簡介
JVM_02 類加載子系統
JVM_03 運行時數據區1- [程序計數器+虛擬機棧+本地方法棧]
JVM_04 本地方法接口
JVM_05 運行時數據區2-堆
JVM_06 運行時數據區3-方法區
JVM_07 運行時數據區4-對象的實例化內存佈局與訪問定位+直接內存
JVM_08 執行引擎(Execution Engine)
JVM_09 字符串常量池StringTable
JVM_10 垃圾回收1-概述+相關算法
JVM_11 垃圾回收2-垃圾回收相關概念
JVM_12 垃圾回收3-垃圾回收器算法