從源碼到運(yùn)行、類加載,再到內(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ī):專門為執(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ī)種類
商用虛擬機(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)稱是“世界上速度最快的虛擬機(jī)”。由于專注于服務(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)注
9文章
3209瀏覽量
76354 -
JAVA
+關(guān)注
關(guān)注
20文章
3001瀏覽量
116419 -
JVM
+關(guān)注
關(guān)注
0文章
161瀏覽量
13036 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
972瀏覽量
30463 -
工具包
+關(guān)注
關(guān)注
0文章
48瀏覽量
9897
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式學(xué)習(xí)指引--嵌入式系統(tǒng)知識(shí)體系,學(xué)習(xí)誤區(qū)
嵌入式系統(tǒng)知識(shí)體系、學(xué)習(xí)誤區(qū)及建議
HIL測(cè)試團(tuán)隊(duì)建設(shè)上篇-知識(shí)體系與角色劃分
嵌入式系統(tǒng)的知識(shí)體系和學(xué)習(xí)誤區(qū)
Jvm的整體結(jié)構(gòu)和特點(diǎn)
嵌入式系統(tǒng)的知識(shí)體系
能夠快速構(gòu)建嵌入式學(xué)習(xí)所需要知識(shí)體系的書(shū)籍推薦
LCD1602知識(shí)體系的結(jié)構(gòu)學(xué)習(xí)與理解
淺析自然語(yǔ)言處理知識(shí)體系結(jié)構(gòu)
電子硬件的知識(shí)體系是怎樣的
Java:JVM虛擬機(jī)的入門知識(shí)
嵌入式系統(tǒng)的知識(shí)體系
JVM知識(shí)體系剖析
評(píng)論