淺談Java虛擬機(jī)(一)—什么是Java虛擬機(jī)

一尊浓、簡介

????首先,來看下面這張圖礼预,Java技術(shù)體系所包含的內(nèi)容:

Oracle Java SE 8 產(chǎn)品組件

????上圖來自于Oracle官網(wǎng) java SE(java 平臺(tái)標(biāo)準(zhǔn)版) 8 產(chǎn)品文檔(https://docs.oracle.com/javase/8/docs/index.html)眠砾,先別被這么多東西唬住虏劲,總體來說托酸,Java SE包括了?JDK(開發(fā)工具包)與?JRE(運(yùn)行環(huán)境)。

? ? 開發(fā)人員要使用java開發(fā)柒巫,就需要依賴JDK励堡,JDK中主要包含了編譯與調(diào)試工具,例如 javac(編譯) 堡掏、jconsole(打開分析控制臺(tái)应结,用來調(diào)試)命令,沒有JDK,就沒法編譯java代碼鹅龄,編譯后的文件需要一個(gè)特殊的環(huán)境加載運(yùn)行揩慕,而這個(gè)環(huán)境就包含在JRE中,因此扮休,一般來說迎卤,JDK中包含了JRE。

? ? JRE中又有什么呢玷坠,JRE中主要包含了java運(yùn)行的核心類庫(例如常用的java.util.*, com.sun.*, javax.net.*等等)以及今天要講的java虛擬機(jī)蜗搔,因此,JRE是保證java程序運(yùn)行的必要條件八堡。

二樟凄、Java虛擬機(jī)

? ? 2.1 虛擬機(jī)概況

? ? ????要理解Java虛擬機(jī),首先要知道虛擬機(jī)是什么兄渺,虛擬機(jī)?Virtual Machine 缝龄,簡稱VM,一個(gè)模擬硬件運(yùn)行的虛擬系統(tǒng)挂谍。如果覺得抽象二拐,可以對(duì)比VR(Virtual?Reality,即虛擬現(xiàn)實(shí))凳兵,它們都是用程序模擬真實(shí)存在的現(xiàn)實(shí)(硬件)百新,如同VR構(gòu)造一個(gè)虛擬世界,VM構(gòu)造了一個(gè)假的完整硬件系統(tǒng)庐扫,包括硬盤饭望、CPU、網(wǎng)卡形庭、I/O設(shè)備等铅辞;VR需要調(diào)動(dòng)視覺以及觸覺讓人感受真實(shí),VM也一樣萨醒,需要借助真實(shí)硬盤進(jìn)行數(shù)據(jù)持久化斟珊,需要橋接真實(shí)網(wǎng)絡(luò)進(jìn)行網(wǎng)絡(luò)通訊等來實(shí)現(xiàn)一個(gè)“真實(shí)”的硬件系統(tǒng)。

? ? ????上面也提到富纸,虛擬機(jī)本質(zhì)就是一個(gè)程序囤踩,運(yùn)行在一個(gè)隔離的環(huán)境中,這也是虛擬機(jī)主要優(yōu)點(diǎn)之一晓褪,可以將虛擬機(jī)內(nèi)部的數(shù)據(jù)封裝并與外界系統(tǒng)隔離堵漱,運(yùn)行在虛擬機(jī)內(nèi)部的指令或程序不再需要關(guān)注外部各種復(fù)雜的環(huán)境或系統(tǒng),適配工作交給虛擬機(jī)即可涣仿,這也是java “一處編譯勤庐,到處運(yùn)行”的口號(hào)實(shí)現(xiàn)的基石示惊。? ??

? ? ? ? 可以按照用途把虛擬機(jī)大致分為兩大類:

? ? ? ? ? ? 1.系統(tǒng)虛擬機(jī),即對(duì)物理計(jì)算機(jī)的完全仿真愉镰,可以安裝各類操作系統(tǒng)(windows,linux...)米罚,例如?VMware Workstation、Visual Box等丈探。

? ? ? ? ? ? 2.程序虛擬機(jī)阔拳,專門為執(zhí)行單個(gè)計(jì)算程序而產(chǎn)生,最典型的就是Java虛擬機(jī)类嗤。

? ? 2.2 Java虛擬機(jī)

? ? ? ? 有了對(duì)虛擬機(jī)的基本認(rèn)識(shí)糊肠,Java虛擬機(jī)(Java Virtual Machine,簡稱JVM)就很好理解了遗锣,Java虛擬機(jī)屬于程序虛擬機(jī)货裹,是專門執(zhí)行字節(jié)碼文件命令的虛擬機(jī)。

? ? ? ? 這里精偿,有一個(gè)誤區(qū)弧圆,Java虛擬機(jī)并不只是運(yùn)行java程序,而是運(yùn)行字節(jié)碼文件命令笔咽,也就是.class文件搔预,它是由我們熟悉的.java文件經(jīng)過編譯器編譯而來,但又并不只是.java文件能夠編譯為字節(jié)碼文件叶组,還有Kotlin拯田、JRuby、Groovy等程序文件甩十,它們通過自己的編譯器都可以編譯為.class文件船庇,然后在JVM上運(yùn)行,所以java虛擬機(jī)不只是平臺(tái)無關(guān)侣监,還具備語言無關(guān)的特性鸭轮。

JVM的語言無關(guān)性

? ? ? ? 解釋型語言具備跨平臺(tái)性質(zhì),只需要對(duì)應(yīng)平臺(tái)有解釋器即可橄霉,例如Python窃爷,但純解釋型往往運(yùn)行速度比較慢(因?yàn)橐鹁浒汛a解釋成機(jī)器語言讓機(jī)器運(yùn)行);而編譯型語言運(yùn)行速度快(啟動(dòng)時(shí)直接編譯成機(jī)器指令姓蜂,所以啟動(dòng)會(huì)比較慢)按厘,例如C語言,但針對(duì)不同平臺(tái)必須進(jìn)行不同的編譯覆糟,且甚至同一段代碼在不同操作系統(tǒng)編譯后可能出現(xiàn)不同的運(yùn)行結(jié)果刻剥。JVM(這里指當(dāng)前的主流商用虛擬機(jī)HotSpot VM)作為字節(jié)碼運(yùn)行環(huán)境,使用解釋和編譯混合工作模式滩字,既使用解釋器保證啟動(dòng)速度,在解釋過程中又有即時(shí)編譯器(Just In Time,簡稱JIT)分析熱點(diǎn)編譯機(jī)器碼保證高效運(yùn)行麦箍,而且具備了跨平臺(tái)性質(zhì)漓藕。

三、JVM的發(fā)展史(了解即可)

自1996年初sun公司發(fā)布的JDK1.0中所包含的Sun Classic VM到今天挟裂,曾經(jīng)涌現(xiàn)享钞、湮滅過許多或經(jīng)典或有特色的虛擬機(jī)實(shí)現(xiàn)。

Sun Classic / Exact VM

? ? ?Sun Classic VM是世界上第一款商用Java虛擬機(jī)诀蓉,使用純解釋器方式來執(zhí)行Java代碼栗竖,導(dǎo)致用戶覺得“Java語言很慢”也因此而來;

? ? ?Exact VM為JDK1.2時(shí)發(fā)布的一臺(tái)虛擬機(jī)渠啤,已經(jīng)具備現(xiàn)代高性能虛擬機(jī)雛形狐肢,即解釋器與編譯器混合工作模式,性能高于當(dāng)時(shí)的Sun Classic VM沥曹,然而商用不久后便被后面的HotSpot VM取代份名。

BEA JRockit

? ? ? ?曾號(hào)稱“世界上速度最快的Java虛擬機(jī)”,不關(guān)心程序啟動(dòng)速度妓美,也就意味著這款虛擬機(jī)不包含解釋器僵腺,使用純JIT編譯后執(zhí)行。

IBM J9 VM

? ? ? ? IBM公司的主力Java虛擬機(jī)壶栋,市場(chǎng)定位與Sun公司的HotSpot VM接近辰如。

MicroSoft JVM

? ? ? ? 微軟曾經(jīng)也是Java語言鐵桿粉絲,而這款虛擬機(jī)可以說是當(dāng)時(shí)(1997年左右)Windows平臺(tái)下性能最好的虛擬機(jī)贵试,但后來Sun公司以侵權(quán)狀告了微軟丧没,迫使這款虛擬機(jī)停止發(fā)展,Sun 與 微軟的恩恩怨怨感興趣的可自行查閱锡移,但這件事不禁會(huì)讓人聯(lián)想呕童,假如微軟沒有被告,一直主力研究與發(fā)展Java淆珊,那Java語言的地位可能今日又會(huì)大有不同夺饲。

Sun HotSpot VM

? ? ? ? 沿用至今且目前使用范圍最廣,Sun JDK 和 Open JDK自帶的默認(rèn)虛擬機(jī)施符。擁有熱點(diǎn)代碼探測(cè)技術(shù)往声,通過執(zhí)行計(jì)數(shù)器找出最有編譯價(jià)值的代碼,通知JIT編譯器進(jìn)行編譯戳吝,以獲取最佳執(zhí)行性能浩销。Oracle 收購 Sun 和 BEA 公司后同時(shí)擁有了兩臺(tái)優(yōu)秀的虛擬機(jī):HotSpot VM 以及上面提到的 JRockit VM,Oracle 在JDK 8中把 JRockit VM 中比HotSpot VM優(yōu)秀的特性(例如垃圾回收器與MissionControl服務(wù))整合進(jìn)HotSpot VM听哭。

四慢洋、總結(jié)

????本章節(jié)主要介紹了Java虛擬機(jī)是什么以及它的一些特性塘雳,下一章我們將一起來深入學(xué)習(xí)Java虛擬機(jī)內(nèi)部內(nèi)存結(jié)構(gòu)以及各個(gè)分區(qū)的作用。

《淺談Java虛擬機(jī)(一)—什么是Java虛擬機(jī)》

《淺談Java虛擬機(jī)(二)—運(yùn)行時(shí)數(shù)據(jù)區(qū)域》

《淺談Java虛擬機(jī)(三)—垃圾回收》

《淺談Java虛擬機(jī)(四)—JVM調(diào)優(yōu)》


本系列文章參考文檔:《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》--?周志明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載普筹,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者败明。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市太防,隨后出現(xiàn)的幾起案子妻顶,更是在濱河造成了極大的恐慌,老刑警劉巖蜒车,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讳嘱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡酿愧,警方通過查閱死者的電腦和手機(jī)沥潭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寓娩,“玉大人叛氨,你說我怎么就攤上這事〖椋” “怎么了寞埠?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焊夸。 經(jīng)常有香客問我仁连,道長,這世上最難降的妖魔是什么阱穗? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任饭冬,我火速辦了婚禮,結(jié)果婚禮上揪阶,老公的妹妹穿的比我還像新娘昌抠。我一直安慰自己,他們只是感情好鲁僚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布炊苫。 她就那樣靜靜地躺著,像睡著了一般冰沙。 火紅的嫁衣襯著肌膚如雪侨艾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天拓挥,我揣著相機(jī)與錄音唠梨,去河邊找鬼。 笑死侥啤,一個(gè)胖子當(dāng)著我的面吹牛当叭,可吹牛的內(nèi)容都是我干的茬故。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼科展,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼均牢!你這毒婦竟也來了糠雨?” 一聲冷哼從身側(cè)響起才睹,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甘邀,沒想到半個(gè)月后琅攘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡松邪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年坞琴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗抑。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剧辐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邮府,到底是詐尸還是另有隱情荧关,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布褂傀,位于F島的核電站忍啤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仙辟。R本人自食惡果不足惜同波,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叠国。 院中可真熱鬧未檩,春花似錦、人聲如沸粟焊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吆玖。三九已至筒溃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沾乘,已是汗流浹背怜奖。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翅阵,地道東北人歪玲。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓迁央,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滥崩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岖圈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1.1 - 概述 Java 總述:Java 不僅是一門編程語言,還是一個(gè)由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系钙皮,這...
    零點(diǎn)145閱讀 992評(píng)論 1 8
  • 從今天開始讀《深入理解 Java 虛擬機(jī)》一書蜂科,并開設(shè)了同名專題 深入理解 Java 虛擬機(jī)。計(jì)劃在 2 周內(nèi)將全...
    SawyerZh閱讀 10,247評(píng)論 17 215
  • 姓名:周君會(huì) 學(xué)號(hào):17011210526 轉(zhuǎn)載自: http://www.reibang.com/p/...
    lotus兒閱讀 1,937評(píng)論 1 9
  • 1.前言 由于后期學(xué)習(xí)需要用到大量的JVM底層的東西短条,所有本人調(diào)整了一下學(xué)習(xí)計(jì)劃导匣,打算先從JVM入手,了解整個(gè)JA...
    叨唧唧的閱讀 584評(píng)論 0 1
  • 久違的晴天茸时,家長會(huì)贡定。 家長大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了可都。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)缓待。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,520評(píng)論 16 22