JVM与Java的体系结构(JVM入门知识体系总结)
寫在前面:博主是一位普普通通的19屆雙非軟工在讀生,平時最大的愛好就是聽聽歌,逛逛B站。博主很喜歡的一句話花開堪折直須折,莫待無花空折枝:博主的理解是頭一次為人,就應該做自己想做的事,做自己不后悔的事,做自己以后不會留有遺憾的事,做自己覺得有意義的事,不浪費這大好的青春年華。博主寫博客目的是記錄所學到的知識并方便自己復習,在記錄知識的同時獲得部分瀏覽量,得到更多人的認可,滿足小小的成就感,同時在寫博客的途中結交更多志同道合的朋友,讓自己在技術的路上并不孤單。
目錄:
1.Java和JVM簡介
???? ?? Java的跨平臺性
???? ?? JVM跨語言的平臺
???? ?? JVM的位置、作用特點
2.Java代碼執(zhí)行流程
3.棧的指令集架構和寄存器的指令集架構
4.JVM的生命周期
1.Java和JVM簡介
1.1Java的跨平臺性
我們都知道java是可以跨平臺的,其實我們字節(jié)碼文件本身就可以跨平臺的,不同操作系統(tǒng)有不同版本的JVM,但是對字節(jié)碼文件的識別都是一樣的
1.2JVM跨語言的平臺
其實我們Java虛擬機不是說只能解釋Java的字節(jié)碼文件,還能解釋其他語言的字節(jié)碼文件,只不過需要我們在編譯其他的語言的時候,編譯器遵循JVM的規(guī)范,那么JVM就可以對其進行解釋也就是說Java虛擬機不關心運行在其內部的程序是何種語言編寫的而只是關心字節(jié)碼文件
1.3JVM的位置、作用特點
1.JVM的位置
2.JVM的作用和特點
2.Java代碼的執(zhí)行流程
Java源代碼---->編譯器(前端編譯器)---->jvm可執(zhí)行的Java字節(jié)碼(即虛擬指令)---->jvm---->jvm中解釋器----->機器可執(zhí)行的二進制機器碼---->程序運行。
字節(jié)碼文件:Java源代碼經過虛擬機編譯器編譯后產生的文件(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。
我們看上圖可以發(fā)現(xiàn)一個java源代碼變成機器指令有兩個編譯的過程
3.JVM的指令架構
Java編譯器輸入的指令流基本上是一種基于棧的指令集架構,另外一種指令集架構則
是基于寄存器的指令集架構。
基于棧式架構的特點:
- 設計和實現(xiàn)更簡單,適用于資源受限的系統(tǒng);
- 避開了寄存器的分配難題:使用零地址指令方式分配。 即是一個棧的操作,我們只需要關心棧頂
- 指令流中的指令大部分是零地址指令,其執(zhí)行過程依賴于操作棧。指令集更小, [但相比于寄存器操作更多,一會兒會有解釋]編譯器容易實現(xiàn)
- 不需要硬件支持,可移植性更好,更好實現(xiàn)跨平臺。棧是一個內存層面,不跟硬件打交道
基于寄存器架構的特點:
- 典型的應用是x86的二進制指令集:比如傳統(tǒng)的PC以及Android的Davlik虛 擬機。
- 指令集架構則完全依賴硬件,可移植性差
- 性能優(yōu)秀和執(zhí)行更高效: 因為基于cpu,比較快,對硬件耦合度較高
- 花費更少的指令去完成一項操作。
- 在大部分情況下,基于寄存器架構的指令集往往都以一地址指令、二地址指令 和三地址指令為主,而基于棧式架構的指令集卻是以零地址指令為主。
舉個例子:我們同樣進行2+3的操作,基于棧和寄存器的計算流程如下:
上邊是基于棧,下邊是基于寄存器的
我們可以發(fā)現(xiàn)完成一個指令,棧的指令集小,但指令多,寄存器指令集大,指令少
總結:
由于跨平臺性的設計,Java的指令都是根據(jù)棧來設計的。不同平臺CPU架構不同,所以不能設計為基于寄存器的。優(yōu)點是跨平臺, 指令集小,編譯器容易實現(xiàn),缺點是性能下降,實現(xiàn)同樣的功能需要更多的指令。
4.JVM的生命周期
4.1JVM的啟動
通過引導類加載器(bootstrap class loader)創(chuàng)建一個初始類(initial class)來完成的,這個類是由虛擬機的具體實現(xiàn)指定的.
4.2JVM的執(zhí)行
- 一個運行中的java虛擬機有著一個清晰的任務:執(zhí)行Java程序;
- 程序開始執(zhí)行的時候他才運行,程序結束時他就停止;
- 執(zhí)行一個所謂的Java程序的時候,真真正正在執(zhí)行的是一個叫做Java虛擬機的進程。
4.3JVM的退出
- 程序正常執(zhí)行結束
- 程序異常或錯誤而異常終止
- 操作系統(tǒng)錯誤導致終止
- 某線程調用Runtime類或System類的exit方法,或Runtime類的halt方法,并且java安全管理器也允許這次exit或halt操作
- 除此之外,JNI規(guī)范描述了用JNI Invocation API來加載或卸載Java虛擬機時,Java虛擬機的退出情況
總結
以上是生活随笔為你收集整理的JVM与Java的体系结构(JVM入门知识体系总结)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解图的各种令人心慌的概念和四种图的存储
- 下一篇: JVM内存进阶