JVM學習筆記——初識JVM

第一次轉到思否寫文章,有些緊張,個人文章主要內容是JAVA學習之路上的筆記總結,好讓以後本身回來複習或是寫出來讓諸位前輩指點一二。html

簡介

本篇主要引入JVM概念,主要包括如下幾個方面。
JVM初識
JVM生命週期
JVM種類前端

JVM初識

從咱們學習JAVA開始,咱們就據說過了JVM的大名,也瞭解了JVM是JAVA實現跨平臺的主要手段,那JVM到底是什麼,是怎麼工做的。java

簡介

JVM是可運行Java代碼的假想計算機 ,包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收,堆 和 一個存儲方法域。
注:JVM是運行在操做系統之上的,它與硬件沒有直接的交互。安全

運行過程

咱們都知道JAVA源文件(.java)是須要編譯成字節碼文件(.class)而後交由JVM解釋器解釋成機器語言的。
也就是以下兩個步驟:服務器

  • java源文件(.java) -> 前端編譯器 -> 字節碼文件(.class)
  • 字節碼文件(.class) -> JVM -> 機器語言
圖解結構

初始JVM.png

JVM的生命週期

JVM實例和JVM執行引擎實例
JVM實例
  • 一個JVM實例表明一個獨立運行的JAVA程序 —— 進程級別。
  • 當啓動一個Java程序時,一個虛擬機實例誕生;當程序關閉退出,這個虛擬機實例也就隨之消亡。
  • 若是在同一臺計算機上同時運行多個Java程序,將獲得多個Java虛擬機實例,每一個Java程序都運行於它本身的Java虛擬機實例中。
JVM執行引擎實例
  • JVM執行引擎實例則對應了屬於運行程序的線程——線程級別
JVM生命週期
啓動

當啓動一個Java程序時,一個JVM實例就產生了,任何一個擁有public static void main(String[] args)函數的class均可以做爲JVM實例運行的起點。oracle

運行

main()做爲該程序初始線程的起點,任何其餘線程均由該線程啓動。框架

消亡
  • 程序中的非守護線程所有執行完畢,程序結束,JVM正常結束。
  • 程序運行過程當中遇到未處理的異常或錯誤。
  • 若安全管理器容許,程序也可使用java.lang.Runtime類或者java.lang.System.exit()來結束。

JVM種類

Sun Classic VM
  • 第一款商用JAVA虛擬機。
  • 只能使用純解釋器的方式執行JAVA代碼。
HotSpot VM
  • 目前使用最普遍的JAVA虛擬機。
  • 熱點代碼探測技術。
    經過計數器找到價值代碼,觸發即時編譯或棧上替換。
    在程序響應時間與最佳執行性能中取得平衡。
JRockit
  • 世界上最快的JAVA虛擬機。
  • 專一於服務器端應用,因此能夠不太關注啓動速度,因此該虛擬機內部不包含解釋器,所有都由即時編譯器編譯後執行。
J9
  • IBM公司研發的JAVA虛擬機,是IBM公司針對本公司生態作出的最合適的虛擬機。
Graal VM
  • 在Oracle收購JRockit後的計劃產品。
  • 跨語言全棧虛擬機,能夠做爲任何語言的運行平臺使用。
  • 支持不一樣語言中混用對方的接口和對象。
  • 若是有虛擬機要代替HotSpot,Graal最有可能。

虛擬機還有不少,這裏就不一一列舉了。函數

學習書籍

《深刻理解JAVA虛擬機》 做者:周志明
《The Java® Virtual Machine Specification》

重巒疊嶂,慶幸相逢

JAVA學習如同一棵技術樹,究竟應該向上追求更高的開源技術,框架技術,仍是應該向下追求底層基礎。技術追求的廣和精的平衡在哪裏?性能

文筆有限,如有錯誤,還望指正,感激涕零。

相關文章
相關標籤/搜索