JVM第一篇:What is the JVM电抚?

1.什么是JVM

JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫纯衍,是JRE的一部分。它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī)再榄,是通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的狡刘。JVM有自己完善的硬件架構(gòu),如處理器困鸥、堆棧嗅蔬、寄存器等,還具有相應(yīng)的指令系統(tǒng)

2.JDK,JRE,JVM關(guān)系

  • JDK(Java Development Kit Java開發(fā)工具包),JDK是提供給Java開發(fā)人員使用的购城,其中包含了java的開發(fā)工具吕座,也包括了JRE。所以安裝了JDK瘪板,就不用在單獨(dú)安裝JRE了吴趴。其中的開發(fā)工具包括編譯工具(javac.exe) 打包工具(jar.exe)等
  • JRE(Java Runtime Environment Java運(yùn)行環(huán)境) 是 JDK 的子集,也就是包括 JRE 所有內(nèi)容侮攀,以及開發(fā)應(yīng)用程序所需的編譯器和調(diào)試器等工具锣枝。JRE 提供了庫(kù)、Java 虛擬機(jī)(JVM)和其他組件兰英,用于運(yùn)行 Java 編程語(yǔ)言撇叁、小程序、應(yīng)用程序
  • JVM(Java Virtual Machine Java虛擬機(jī))畦贸,JVM可以理解為是一個(gè)虛擬出來(lái)的計(jì)算機(jī)陨闹,具備著計(jì)算機(jī)的基本運(yùn)算方式,它主要負(fù)責(zé)把 Java 程序生成的字節(jié)碼文件薄坏,解釋成具體系統(tǒng)平臺(tái)上的機(jī)器指令趋厉,讓其在各個(gè)平臺(tái)運(yùn)行

3.Java是怎么實(shí)現(xiàn)它的跨平臺(tái)特性的

系統(tǒng)軟件無(wú)法通用是一個(gè)常見的問題。但使用過 Java 的同學(xué)都知道胶坠,Java 代碼可以在服務(wù)端(Linux 系統(tǒng))運(yùn)行君账,也可以在 Windows 系統(tǒng)運(yùn)行,但我們并沒有生成多份不同的代碼沈善。所以 Java 語(yǔ)言是如何做到的呢?

我們都知道在 Windows 系統(tǒng)上一個(gè)軟件包裝包是 exe 后綴的乡数,而這個(gè)軟件包在蘋果的 Mac OSX 系統(tǒng)上是無(wú)法安裝的。類似地闻牡,Mac OSX 系統(tǒng)上軟件安裝包則是 dmg 后綴净赴,同樣無(wú)法在 Windows 系統(tǒng)上安裝

為什么不同系統(tǒng)上的軟件無(wú)法安裝,這是因?yàn)椴僮飨到y(tǒng)底層的實(shí)現(xiàn)是不一樣的罩润。對(duì)于 Windows 系統(tǒng)來(lái)說玖翅,exe 后綴的軟件代碼最終編譯成 Windows 系統(tǒng)能識(shí)別的機(jī)器碼。而 Mac OSX 系統(tǒng)來(lái)說哨啃,dmg 后綴的軟件代碼最終編譯成 Mac OSX 系統(tǒng)能識(shí)別的代碼

與其他語(yǔ)言不同烧栋,Java 語(yǔ)言并不直接將代碼編譯成與系統(tǒng)有關(guān)的機(jī)器碼,而是編譯成一種特定的語(yǔ)言規(guī)范拳球,這種語(yǔ)言規(guī)范我們稱之為字節(jié)碼审姓。無(wú)論 Java 程序要在 Windows 系統(tǒng),還是 Mac OSX 系統(tǒng)祝峻,抑或是 Linux 系統(tǒng)魔吐,它首先都得編譯成字節(jié)碼文件扎筒,之后才能運(yùn)行

但即使編譯成字節(jié)碼文件了,各個(gè)系統(tǒng)還是無(wú)法明白字節(jié)碼文件的內(nèi)容酬姆,這時(shí)候就需要 Java 虛擬機(jī)的幫助了嗜桌。Java 虛擬機(jī)會(huì)解析字節(jié)碼文件的內(nèi)容,并將其翻譯為各操作系統(tǒng)能理解的機(jī)器碼

簡(jiǎn)單地說辞色,對(duì)于同樣一份 Java 源碼文件骨宠,我們編譯成字節(jié)碼之后,無(wú)論是 Linux 系統(tǒng)還是 Windows 系統(tǒng)都不認(rèn)識(shí)相满。這時(shí)候JVM就是一個(gè)翻譯官层亿,在 Linux 系統(tǒng)上翻譯成 Linux 機(jī)器碼給 Linux 系統(tǒng)聽,在 Windows 系統(tǒng)上翻譯成 Windows 機(jī)器碼給 Windows 系統(tǒng)聽立美。這樣一來(lái)匿又,Java 就實(shí)現(xiàn)了「Write Once,Run Anywhere」的偉大愿景了

總結(jié):

Java程序的跨平臺(tái)特性主要是指字節(jié)碼文件可以在任何具有JVM的計(jì)算機(jī)或者電子設(shè)備上運(yùn)行建蹄,Java虛擬機(jī)中的Java解釋器負(fù)責(zé)將字節(jié)碼文件解釋成為特定的機(jī)器碼進(jìn)行運(yùn)行碌更。因此在運(yùn)行時(shí),Java源程序需要通過編譯器編譯成為.class文件洞慎。眾所周知java.exe是java class文件的執(zhí)行程序痛单,但實(shí)際上java.exe程序只是一個(gè)執(zhí)行的外殼,它會(huì)裝載jvm.dll(windows下拢蛋,下皆以windows平臺(tái)為例桦他,linux下為:libjvm.so)蔫巩,這個(gè)動(dòng)態(tài)連接庫(kù)才是java虛擬機(jī)的實(shí)際操作處理所在

4.JVM的位置

  • 這部分是整個(gè) Java 實(shí)現(xiàn)跨平臺(tái)的最核心內(nèi)容谆棱,由 Java 程序編譯成的 .class 文件會(huì)在虛擬機(jī)上執(zhí)行
  • 另外在 JVM 解釋 class 文件時(shí)需要調(diào)用類庫(kù) lib。在 JRE 目錄下有兩個(gè)文件夾 lib圆仔、bin垃瞧,而 lib 就是 JVM 執(zhí)行所需要的類庫(kù)
  • jvm.dll 并不能獨(dú)立工作,當(dāng) jvm.dll 啟動(dòng)后坪郭,會(huì)使用 explicit 方法來(lái)載入輔助動(dòng)態(tài)鏈接庫(kù)一起執(zhí)行

下一篇:
JVM第二篇:JVM構(gòu)成

相關(guān)文章:
JDK个从、JRE、JVM歪沃,是什么關(guān)系嗦锐?
JVM是什么

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沪曙,隨后出現(xiàn)的幾起案子奕污,更是在濱河造成了極大的恐慌,老刑警劉巖液走,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳默,死亡現(xiàn)場(chǎng)離奇詭異贾陷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘱根,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門髓废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人该抒,你說我怎么就攤上這事慌洪。” “怎么了凑保?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蒋譬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我愉适,道長(zhǎng)犯助,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任维咸,我火速辦了婚禮剂买,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘癌蓖。我一直安慰自己瞬哼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布租副。 她就那樣靜靜地躺著坐慰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪用僧。 梳的紋絲不亂的頭發(fā)上结胀,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音责循,去河邊找鬼糟港。 笑死,一個(gè)胖子當(dāng)著我的面吹牛院仿,可吹牛的內(nèi)容都是我干的秸抚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼歹垫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剥汤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起排惨,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吭敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后若贮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體省有,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痒留,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠢沿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伸头。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舷蟀,靈堂內(nèi)的尸體忽然破棺而出恤磷,到底是詐尸還是另有隱情,我是刑警寧澤野宜,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布扫步,位于F島的核電站,受9級(jí)特大地震影響匈子,放射性物質(zhì)發(fā)生泄漏河胎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一虎敦、第九天 我趴在偏房一處隱蔽的房頂上張望游岳。 院中可真熱鬧,春花似錦其徙、人聲如沸胚迫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)访锻。三九已至,卻和暖如春闹获,著一層夾襖步出監(jiān)牢的瞬間期犬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工昌罩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哭懈,地道東北人灾馒。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓茎用,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親睬罗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轨功,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • 閱讀本文大概需要 5.6 分鐘 前言 在 Java 開發(fā)中,我們經(jīng)常會(huì)提到 JVM容达。我們知道 JVM 是 Java...
    小李不禿閱讀 546評(píng)論 1 4
  • 自己學(xué)習(xí)記錄(偷學(xué)享學(xué)King老師)古涧,方便隨時(shí)查看,不喜勿噴花盐,如有錯(cuò)誤羡滑,歡迎指出菇爪。 先來(lái)個(gè)思維導(dǎo)圖看一下大概內(nèi)容:...
    芳心之縱火犯閱讀 565評(píng)論 0 1
  • 為什么要有JVM? JVM就是Java運(yùn)行虛擬機(jī)柒昏,那么虛擬機(jī)又分為系統(tǒng)虛擬機(jī)和程序虛擬機(jī)凳宙,而JVM是屬于程序虛擬...
    _Levi__閱讀 353評(píng)論 1 0
  • JVM(Java Virtual Machine,Java虛擬機(jī)) Java程序的跨平臺(tái)特性主要是指字節(jié)碼文件可以...
    uknownothi_8742閱讀 250評(píng)論 0 0
  • 1.前言 由于后期學(xué)習(xí)需要用到大量的JVM底層的東西职祷,所有本人調(diào)整了一下學(xué)習(xí)計(jì)劃氏涩,打算先從JVM入手,了解整個(gè)JA...
    叨唧唧的閱讀 580評(píng)論 0 1