第一次轉到思否寫文章,有些緊張,個人文章主要內容是JAVA學習之路上的筆記總結,好讓以後本身回來複習或是寫出來讓諸位前輩指點一二。html
簡介
本篇主要引入JVM概念,主要包括如下幾個方面。
JVM初識
JVM生命週期
JVM種類前端
從咱們學習JAVA開始,咱們就據說過了JVM的大名,也瞭解了JVM是JAVA實現跨平臺的主要手段,那JVM到底是什麼,是怎麼工做的。java
簡介
JVM是可運行Java代碼的假想計算機 ,包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收,堆 和 一個存儲方法域。
注:JVM是運行在操做系統之上的,它與硬件沒有直接的交互。安全
運行過程
咱們都知道JAVA源文件(.java)是須要編譯成字節碼文件(.class)而後交由JVM解釋器解釋成機器語言的。
也就是以下兩個步驟:服務器
- java源文件(.java) -> 前端編譯器 -> 字節碼文件(.class)
- 字節碼文件(.class) -> 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()來結束。
Sun Classic VM
- 第一款商用JAVA虛擬機。
- 只能使用純解釋器的方式執行JAVA代碼。
HotSpot VM
- 目前使用最普遍的JAVA虛擬機。
- 熱點代碼探測技術。
經過計數器找到價值代碼,觸發即時編譯或棧上替換。
在程序響應時間與最佳執行性能中取得平衡。
JRockit
- 世界上最快的JAVA虛擬機。
- 專一於服務器端應用,因此能夠不太關注啓動速度,因此該虛擬機內部不包含解釋器,所有都由即時編譯器編譯後執行。
J9
- IBM公司研發的JAVA虛擬機,是IBM公司針對本公司生態作出的最合適的虛擬機。
Graal VM
- 在Oracle收購JRockit後的計劃產品。
- 跨語言全棧虛擬機,能夠做爲任何語言的運行平臺使用。
- 支持不一樣語言中混用對方的接口和對象。
- 若是有虛擬機要代替HotSpot,Graal最有可能。
虛擬機還有不少,這裏就不一一列舉了。函數
學習書籍
《深刻理解JAVA虛擬機》 做者:周志明
重巒疊嶂,慶幸相逢
JAVA學習如同一棵技術樹,究竟應該向上追求更高的開源技術,框架技術,仍是應該向下追求底層基礎。技術追求的廣和精的平衡在哪裏?性能
文筆有限,如有錯誤,還望指正,感激涕零。