JVM_01 簡介

完整JVM學習筆記請戳

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-垃圾回收器算法

相關文章
相關標籤/搜索