從源碼到運(yùn)行、類(lèi)加載,再到內(nèi)存分配和垃圾回收,以及JVM調(diào)優(yōu)的技巧與實(shí)戰(zhàn)。
理論-實(shí)戰(zhàn)-面試三結(jié)合,帶大家剖析整個(gè)JVM知識(shí)體系,一站解決JVM問(wèn)題。
1、Oracle Java SE 8 產(chǎn)品組件
通常來(lái)說(shuō) Java平臺(tái)標(biāo)準(zhǔn)版(Java SE)包括 Java SE開(kāi)發(fā)工具包(JDK)和Java SE運(yùn)行時(shí)環(huán)境(JRE)。
JRE提供了運(yùn)行以Java編程語(yǔ)言編寫(xiě)的applet和應(yīng)用程序所必需的庫(kù),Java虛擬機(jī)和其他組件;JDK包括JRE以及編譯器和調(diào)試器等命令行開(kāi)發(fā)工具,可以用來(lái)開(kāi)發(fā)Java應(yīng)用程序 。
PS:JDK包含JRE,我們通常安裝JDK的同時(shí)也會(huì)安裝JRE。
2、虛擬機(jī)
上圖的最下一行Java虛擬機(jī)是被 JRE 所包含,我們?cè)诮榻BJava虛擬機(jī)時(shí),先了解虛擬機(jī)的概念。
所謂虛擬機(jī),其實(shí)就是一臺(tái)虛擬的機(jī)器,可以用來(lái)執(zhí)行一系列虛擬的命令。大體上虛擬機(jī)可以分為兩種:系統(tǒng)虛擬機(jī)和程序虛擬機(jī)。
①、系統(tǒng)虛擬機(jī):是完全對(duì)物理計(jì)算機(jī)的仿真,可以說(shuō)和一臺(tái)真實(shí)的PC操作系統(tǒng)沒(méi)什么區(qū)別。比如常用的 Vmare 以及 Visual Box 軟件,通過(guò)這些軟件能夠模擬出具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。
②、程序虛擬機(jī):專(zhuān)門(mén)為執(zhí)行單個(gè)計(jì)算程序而產(chǎn)生,最典型的就是Java虛擬機(jī),在Java虛擬機(jī)中執(zhí)行字節(jié)碼文件命令。
3、Java虛擬機(jī)
了解了什么是虛擬機(jī),我們?cè)倏词裁词?Java虛擬機(jī)。
Java虛擬機(jī)可以看做是一臺(tái)抽象的計(jì)算機(jī),如同真實(shí)的計(jì)算機(jī)那樣,它有自己的指令集以及各種運(yùn)行時(shí)內(nèi)存區(qū)域,它與Java語(yǔ)言沒(méi)有必然的聯(lián)系,只與特定的二進(jìn)制文件——class 文件格式關(guān)聯(lián)(字節(jié)碼文件),可以通過(guò)Java語(yǔ)言或者其他語(yǔ)言編寫(xiě)的程序編譯成class文件,然后在Java虛擬機(jī)上運(yùn)行。Java虛擬機(jī)有以下二個(gè)特點(diǎn):
①、語(yǔ)言無(wú)關(guān)
Java虛擬機(jī)只和class文件關(guān)聯(lián),所以只要你編寫(xiě)程序的語(yǔ)言能夠編譯成class文件,那么都能夠在Java虛擬機(jī)上運(yùn)行。
②、平臺(tái)無(wú)關(guān)
Java從誕生之初就宣傳的一個(gè)口號(hào):一次編寫(xiě),到處運(yùn)行。
也就是說(shuō)Java是一個(gè)跨平臺(tái)的語(yǔ)言,那么Java是如何實(shí)現(xiàn)跨平臺(tái)的呢?
其實(shí)Java之所以跨平臺(tái)是因?yàn)镴ava虛擬機(jī)的適配,不同的系統(tǒng)實(shí)現(xiàn)不同的Java虛擬機(jī)。Java虛擬機(jī)就相當(dāng)于操作系統(tǒng)和應(yīng)用程序之間的中介,每種平臺(tái)安裝適應(yīng)該平臺(tái)的Java虛擬機(jī),那么我們編寫(xiě)的程序當(dāng)然能夠在任意平臺(tái)運(yùn)行。
4、Java虛擬機(jī)種類(lèi)
商用虛擬機(jī):
①、Sun HotSpot
該虛擬機(jī)性能優(yōu)越,是 sun JDK1.3 及以后所有 sun JDK 版本默認(rèn)的虛擬機(jī),使用最為廣泛,本系列博客就是以這個(gè)虛擬機(jī)為平臺(tái)進(jìn)行介紹。
②、BEA JRockit
JRockit 虛擬機(jī)是 BEA 公司于 2002 年從 Appeal Virtual Machines 收購(gòu)獲得的虛擬機(jī)。它是一款面向服務(wù)器硬件和服務(wù)端使用場(chǎng)景高度優(yōu)化過(guò)的虛擬機(jī),曾經(jīng)號(hào)稱(chēng)是“世界上速度最快的虛擬機(jī)”。由于專(zhuān)注于服務(wù)端應(yīng)用,它的內(nèi)部不包含解析器的實(shí)現(xiàn),全部代碼都靠即時(shí)編譯器編譯后執(zhí)行。
③、IBM J9
J9 虛擬機(jī)是 IBM 公司單獨(dú)開(kāi)發(fā)的高性能虛擬機(jī),它并不獨(dú)立出售,而是作為 IBM 公司各種產(chǎn)品的執(zhí)行平臺(tái),IBM 把它定義為一個(gè)可以適應(yīng)從嵌入式設(shè)備到大型企業(yè)級(jí)應(yīng)用的、高可移植性的Java運(yùn)行平臺(tái)。
④、Sun Classic
這個(gè)虛擬機(jī)很原始,是 JDK1.0 時(shí)代使用的Java虛擬機(jī),是各種虛擬機(jī)的鼻祖,它的內(nèi)部不存在即時(shí)編譯器,只能使用純解釋的方式運(yùn)行。
⑤、Sun Exact
這是 Sun 公司在 HotSpot 之外的另一個(gè)虛擬機(jī),在 JDK1.2 時(shí)代曾短暫的投入過(guò)商用,它和 HotSpot 同時(shí)開(kāi)發(fā),但最終被 HotSpot 取代。
⑥、Apache Harmony
Harmony 是 Apache 軟件基金會(huì)主導(dǎo)的、開(kāi)源的、獨(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ī)。
嵌入式虛擬機(jī)
①、Dalvik
Dalvik 虛擬機(jī)是 Google 等廠商合作開(kāi)發(fā)的 Android 移動(dòng)設(shè)備平臺(tái)的核心組成部分之一,它執(zhí)行 dex(Dalvik Executable) 文件而不是 class 文件,使用寄存器架構(gòu)而不是棧架構(gòu),但是它的開(kāi)發(fā)體系與Java有著千絲萬(wàn)縷的關(guān)系,可以直接使用大部分的 Java API、dex 文件可以直接從class文件轉(zhuǎn)化而來(lái)。并且在 Android 2.2 中提供了即時(shí)編譯器的實(shí)現(xiàn),性能大大的提高。
②、KVM
在 Android、IOS 等智能手機(jī)操作系統(tǒng)出現(xiàn)之前,曾廣泛應(yīng)用于手機(jī)平臺(tái)的一種虛擬機(jī)。
③、CDC/CLDC HotSpot
CDC和 CLDC HotSpot 分別是 Sun 針對(duì)高端嵌入式設(shè)備和中低端嵌入式設(shè)備的虛擬機(jī),用來(lái)代替 KVM。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3055瀏覽量
74332 -
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105149 -
JVM
+關(guān)注
關(guān)注
0文章
158瀏覽量
12261 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
940瀏覽量
28427 -
工具包
+關(guān)注
關(guān)注
0文章
47瀏覽量
9564
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論