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

嵌入式系統(tǒng)的知識體系

評論