目錄
1. 什么是java虛擬機(jī)
2. java虛擬機(jī)分類
2.1. 商用虛擬機(jī)
2.2. 嵌入式虛擬機(jī)
3.java虛擬機(jī)架構(gòu)
4.java虛擬機(jī)運(yùn)行過(guò)程
1. 什么是java虛擬機(jī)
? ? ? ?傳統(tǒng)意義上的虛擬機(jī)是一種抽象化的計(jì)算機(jī),通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的,是操作系統(tǒng)級(jí)別的虛擬機(jī)。Java虛擬機(jī)是一種程序虛擬機(jī),有自己完善的硬體架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。
2. java虛擬機(jī)分類
2.1. 商用虛擬機(jī)
(1)Sun HotSpot
該虛擬機(jī)性能優(yōu)越,是 sun JDK1.3 及以后所有 sun JDK 版本默認(rèn)的虛擬機(jī),使用最為廣泛,一般默認(rèn)所說(shuō)的虛擬機(jī)就是該虛擬機(jī)。
(2)BEA??JRockit
JRockit 虛擬機(jī)是 BEA 公司于 2002 年從 Appeal Virtual Machines 收購(gòu)獲得的虛擬機(jī)。
它是一款面向服務(wù)器硬件和服務(wù)端使用場(chǎng)景高度優(yōu)化過(guò)得虛擬機(jī),曾經(jīng)號(hào)稱是“世界上速度最快的虛擬機(jī)”。
由于專注于服務(wù)端應(yīng)用,它的內(nèi)部不包含解析器的實(shí)現(xiàn),全部代碼都靠即時(shí)編譯器編譯后執(zhí)行。
(3)IBM J9
J9 虛擬機(jī)是 IBM 公司單獨(dú)開發(fā)的高性能虛擬機(jī),它并不獨(dú)立出售,而是作為 IBM 公司各種產(chǎn)品的執(zhí)行平臺(tái),IBM 把它定義為一個(gè)可以適應(yīng)從嵌入式設(shè)備到大型企業(yè)級(jí)應(yīng)用的、高可移植性的Java運(yùn)行平臺(tái)。
(4)Sun Classic?
這個(gè)虛擬機(jī)很原始,是 JDK1.0 時(shí)代使用的Java虛擬機(jī),是各種虛擬機(jī)的鼻祖,它的內(nèi)部不存在即時(shí)編譯器,只能使用純解釋的方式運(yùn)行。
(5)Sun Exact?
這是 Sun 公司在 HotSpot 之外的另一個(gè)虛擬機(jī),在 JDK1.2 時(shí)代曾短暫的投入過(guò)商用,它和 HotSpot 同時(shí)開發(fā),但最終被 HotSpot 取代。
(6)Apache Harmony?
Harmony 是 Apache 軟件基金會(huì)主導(dǎo)的、開源的、獨(dú)立的、實(shí)際兼容與 JDK1.5 和 JDK1.6的虛擬機(jī)實(shí)現(xiàn),
它間接催生了 Google Android 平臺(tái)的 Dalvik 虛擬機(jī),Android 的影響力現(xiàn)在有多大不用多說(shuō),目前已經(jīng)是最成功的的數(shù)碼設(shè)備通用平臺(tái)。
但是由于它的 TCK 授權(quán)問(wèn)題,直接導(dǎo)致 Apache 與 Oracle 的決裂,從而退出了 JCP 組成,這是近代 Java 陣營(yíng)遇到的最嚴(yán)重的分裂危機(jī)。
2.2. 嵌入式虛擬機(jī)
(1)Dalvik
Dalvik 虛擬機(jī)是 Google 等廠商合作開發(fā)的 Android 移動(dòng)設(shè)備平臺(tái)的核心組成部分之一,它執(zhí)行 dex(Dalvik Executable) 文件而不是 class 文件,
使用寄存器架構(gòu)而不是棧架構(gòu),但是它的開發(fā)體系與Java有著千絲萬(wàn)縷的關(guān)系,可以直接使用大部分的 Java API、dex 文件可以直接從class文件轉(zhuǎn)化而來(lái)。
并且在 Android 2.2 中提供了即時(shí)編譯器的實(shí)現(xiàn),性能大大的提高。
(2)KVM
在 Android、IOS 等智能手機(jī)操作系統(tǒng)出現(xiàn)之前,曾廣泛應(yīng)用于手機(jī)平臺(tái)的一種虛擬機(jī)。
(3)CDC/CLDC HotSpot
CDC和 CLDC HotSpot 分別是 Sun 針對(duì)高端嵌入式設(shè)備和中低端嵌入式設(shè)備的虛擬機(jī),用來(lái)代替 KVM。
?
3.java虛擬機(jī)架構(gòu)
JVM的架構(gòu)分為三個(gè)部分:類加載器、運(yùn)行時(shí)數(shù)據(jù)區(qū)和執(zhí)行引擎。
(1) 類加載器類加載器是JVM的重要組成部分,它負(fù)責(zé)將Java類加載到JVM中。類加載器將Java類文件加載到內(nèi)存中,并將其轉(zhuǎn)換為JVM可以理解的格式。類加載器分為三個(gè)層次:?jiǎn)?dòng)類加載器、擴(kuò)展類加載器和應(yīng)用程序類加載器。啟動(dòng)類加載器是JVM的一部分,它負(fù)責(zé)加載Java核心類庫(kù),如java.lang和java.util等。擴(kuò)展類加載器負(fù)責(zé)加載Java擴(kuò)展類庫(kù),如JDBC驅(qū)動(dòng)程序和Java Servlet API等。應(yīng)用程序類加載器負(fù)責(zé)加載應(yīng)用程序的類文件。
(2) 運(yùn)行時(shí)數(shù)據(jù)區(qū)運(yùn)行時(shí)數(shù)據(jù)區(qū)是JVM的內(nèi)存管理系統(tǒng),它分為五個(gè)部分:方法區(qū)、堆、虛擬機(jī)棧、本地方法棧和程序計(jì)數(shù)器。方法區(qū)存儲(chǔ)類的結(jié)構(gòu)信息、常量池、靜態(tài)變量和方法代碼等。堆是Java程序運(yùn)行時(shí)的內(nèi)存區(qū)域,用于存儲(chǔ)對(duì)象實(shí)例。虛擬機(jī)棧用于存儲(chǔ)方法的局部變量、操作數(shù)棧和返回值等。本地方法棧用于存儲(chǔ)本地方法的參數(shù)和返回值。程序計(jì)數(shù)器用于記錄當(dāng)前線程執(zhí)行的字節(jié)碼指令地址。
(3) 執(zhí)行引擎執(zhí)行引擎是JVM的核心部分,它負(fù)責(zé)將Java字節(jié)碼轉(zhuǎn)換為機(jī)器碼,并執(zhí)行Java程序。執(zhí)行引擎分為兩個(gè)部分:解釋器和即時(shí)編譯器。
解釋器將Java字節(jié)碼逐條解釋為機(jī)器碼,并執(zhí)行Java程序。即時(shí)編譯器將Java字節(jié)碼編譯為本地機(jī)器碼,并執(zhí)行Java程序。即時(shí)編譯器可以提高Java程序的執(zhí)行效率。
4.java虛擬機(jī)運(yùn)行過(guò)程
java程序運(yùn)行過(guò)程:字節(jié)碼文件加載 -> 解釋執(zhí)行/編譯執(zhí)行
簡(jiǎn)單圖:
?復(fù)雜圖:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-677634.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-677634.html
到了這里,關(guān)于JVM第一篇 認(rèn)識(shí)java虛擬機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!