從頭開始學習->JVM(二):為什么java需要JVM(Java虛擬機)?

前言

在我們對java的越發(fā)了解之后拒担,我們開始把注意力投到了java虛擬機這一塊嘹屯。

我們意識到,java所謂的“Write Once从撼,Run Anywhere”的特性州弟,就是基于JVM才能夠實現(xiàn)的。那么我們就會好奇低零,為什么JVM會有這樣的功效呢婆翔?

而且在探索的過程中,我們發(fā)現(xiàn)掏婶,JVM不僅是涉及到了“Write Once啃奴,Run Anywhere”的特性,而且還涉及到了java程序的性能問題雄妥,于是我們發(fā)現(xiàn)最蕾,我們必須要去深入的了解一下JVM依溯。

正文

對JVM的研究,千頭萬緒瘟则,如果直接進入JVM的世界黎炉,我們可能還是不能真正的從整體上意識到JVM是什么東西,可能我們對JVM的細節(jié)有了足夠的認知醋拧,但是我們卻始終沒有把這個概念從整體上弄清楚慷嗜,沒有意識到JVM對于java的作用,在整個程序世界里面趁仙,如果不明白java為什么需要JVM洪添,那么我們也算不上真正的認識到JVM垦页。

而要認識清楚這一點雀费,我們要先弄清楚所謂的虛擬機是什么。

一. 虛擬機是什么痊焊?盏袄、

“虛擬機”是一個相對于“物理機”的概念,這兩種機器都有代碼執(zhí)行能力薄啥,其區(qū)別是物理機的執(zhí)行引擎是直接建立在處理器辕羽、緩存、指令集和操作系統(tǒng)層面上的垄惧,而虛擬機的執(zhí)行引擎則是由軟件自行實現(xiàn)的刁愿,因此可以不受物理條件制約地定制指令集與執(zhí)行引擎的結構關系,能夠執(zhí)行那些不被硬件直接支持的指令集格式到逊。

虛擬機铣口,簡單點理解就是將一臺電腦分配成多個具備完整計算機性能的系統(tǒng),當然觉壶,這些獨立的系統(tǒng)脑题,也就是我們所說的虛擬機了,它們都在共享這臺電腦的硬件資源铜靶。

這些虛擬機雖然是運行在同一臺電腦上面叔遂,但是每一臺虛擬機都有獨立的CMOS,硬盤和操作系統(tǒng)争剿。

從這里可以看出來已艰,虛擬機都有自己的獨立的環(huán)境,是隔絕了外界的蚕苇。說白了旗芬,虛擬機就像是獨立的一個王國,它可以設置屬于自己的規(guī)則捆蜀,而不會受到外界因素的影響疮丛。

二. java為什么需要java虛擬機幔嫂?

對于計算機硬件來說,不管是什么操作系統(tǒng)誊薄,計算機硬件只認識簡單的二進制語言履恩,但是不同的操作系統(tǒng)會有不同的編譯器來將我們的高級語言編譯為計算機硬件認識的二進制語言,那么就會出現(xiàn)一個問題呢蔫,比如一個“A”切心,windows操作系統(tǒng)編譯后的二進制是“0101”,但是蘋果操作系統(tǒng)編譯后的二進制卻是“1010”片吊,這樣就會出現(xiàn)各個操作系統(tǒng)不統(tǒng)一的問題绽昏。

而java要實現(xiàn)的,是“一次編譯俏脊,到處能用”的特性全谤,那么如果碰到了這樣的情況,基本上就是無法解決的爷贫。

于是认然,java決定了,要有自己的虛擬機漫萄,讓所有的平臺卷员,都有著相同的編譯方式,這樣腾务,不管在哪個操作系統(tǒng)毕骡,相同的java代碼,最后都有著相同的結果岩瘦。

那么未巫,JVM應運而生。

三. JVM做了什么担钮?

首先我們要知道橱赠,JVM,也就是java虛擬機箫津,它本身也是一個虛擬機狭姨,也就是說,它有著虛擬機的一切特性苏遥。它有著自己的獨立的環(huán)境饼拍,在這個環(huán)境中,它就是這個環(huán)境的王者田炭,它規(guī)定著這個環(huán)境的一切規(guī)則师抄。

那么,java虛擬機教硫,它規(guī)定了什么規(guī)則呢叨吮?

我們都知道辆布,一段java代碼,在經(jīng)過我們編譯打包后茶鉴,會變成一段class文件的字節(jié)碼锋玲,但字節(jié)碼并不能夠直接運行在操作系統(tǒng)之上,因為字節(jié)碼指令并非等價于本地機器指令涵叮,它內(nèi)部包含的僅僅只是一些能夠被 JVM 所識別的字節(jié)碼指令惭蹂、符號表,以及其他的輔助信息割粮。而JVM盾碗,則是規(guī)定了這段字節(jié)碼,會被轉譯成什么樣的二進制文件舀瓢,最后會運行出什么樣的結果廷雅。

那么,不管你是在windows程序上寫的java代碼氢伟,還是在蘋果系統(tǒng)上寫的java代碼榜轿,最后也不管你是在linux系統(tǒng)上運行這段java代碼幽歼,還是你在windows系統(tǒng)上運行java代碼朵锣,你都只需要編譯一次,當你把這一次編譯后的字節(jié)碼代碼甸私,在不同操作系統(tǒng)上的不同的JVM上運行的時候诚些,你最后獲取的結果都是一樣的,你都能得到你想要的結果皇型。這樣诬烹,所謂的群體化協(xié)作開發(fā)就能得到實現(xiàn),所有的java開發(fā)者們弃鸦,不管他們使用的是什么樣的電腦绞吁,最后都能開發(fā)同一個項目,為同一個結果進行開發(fā)唬格。

image

總的來說家破,JVM使用Java字節(jié)碼的方式,作為Java用戶語言和機器語言之間的中間語言购岗。實現(xiàn)一個通用的汰聋、和機器無關的執(zhí)行平臺。

也就是說喊积,JVM就是java程序運行的平臺烹困,是java語言底層實現(xiàn)的基礎。沒有JVM乾吻,java程序無法正常的運行髓梅,也無法有著“一次編譯拟蜻,到處執(zhí)行”的特性,等于是說枯饿,JVM是java霸業(yè)的奠基者瞭郑。

結束語

java基于要實現(xiàn)自己的特性,所以創(chuàng)造了JVM鸭你,而正是因為有了JVM屈张,java變成編程語言的霸主(原因之一),所以從某種程度上來講袱巨,現(xiàn)在的java阁谆,是由JVM“創(chuàng)造的”。

因此愉老,我們能深刻的理解到场绿,JVM和java之間深深的羈絆。

在程序語言發(fā)展的幾十年間嫉入,java屹立不倒焰盗,靠的當然也不僅僅是一個JVM,靠的是與時俱進咒林,不停的進步熬拒,因此java語言的版本變遷也一直在進行,從來沒有停止過垫竞。

但是JVM作為java語言的脊梁的這個事實澎粟,卻一直沒有改變。

所以欢瞪,如果想對java這門語言有著更加深刻的認知活烙,那么我們就必須把我們的注意力放到JVM上面來,必須要深刻的去研究一下JVM遣鼓,這樣我們才能深刻的了解到java從開發(fā)到編譯啸盏,再到運行的整個過程。

參考博客

因為這篇文章是我磨磨蹭蹭寫了好幾天才寫完骑祟,電腦關了又開好幾次回懦,所以參考了那些博客確實是不大記得了,如果有人發(fā)現(xiàn)了我的博客有哪些內(nèi)容是借鑒了您的博客曾我,請及時通知我粉怕,我會貼上您的博客地址的。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抒巢,一起剝皮案震驚了整個濱河市贫贝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖稚晚,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崇堵,死亡現(xiàn)場離奇詭異,居然都是意外死亡客燕,警方通過查閱死者的電腦和手機鸳劳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來也搓,“玉大人赏廓,你說我怎么就攤上這事“剩” “怎么了幔摸?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颤练。 經(jīng)常有香客問我既忆,道長,這世上最難降的妖魔是什么嗦玖? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任患雇,我火速辦了婚禮,結果婚禮上宇挫,老公的妹妹穿的比我還像新娘苛吱。我一直安慰自己,他們只是感情好捞稿,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布又谋。 她就那樣靜靜地躺著拼缝,像睡著了一般娱局。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咧七,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天衰齐,我揣著相機與錄音,去河邊找鬼继阻。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的遂黍。 我是一名探鬼主播伶氢,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墨辛!你這毒婦竟也來了卓研?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奏赘,沒想到半個月后寥闪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡磨淌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年疲憋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梁只。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡缚柳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搪锣,到底是詐尸還是另有隱情喂击,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布淤翔,位于F島的核電站翰绊,受9級特大地震影響,放射性物質發(fā)生泄漏旁壮。R本人自食惡果不足惜监嗜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抡谐。 院中可真熱鬧裁奇,春花似錦、人聲如沸麦撵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免胃。三九已至音五,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羔沙,已是汗流浹背躺涝。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扼雏,地道東北人坚嗜。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像诗充,于是被迫代替她去往敵國和親苍蔬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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