最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java為什么需要虛擬機(jī)jvm原理詳解

 更新時(shí)間:2021年11月23日 11:54:21   作者:fntp  
這篇文章主要為大家介紹了java為什么需要虛擬機(jī)jvm的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

在這里插入圖片描述

曾幾何時(shí),我們還是初識(shí)Hello World的時(shí)候,我們哪曾知道,Java這門(mén)神奇的語(yǔ)言,在執(zhí)行我們的代碼的時(shí)候,不是直接將我們所編寫(xiě)的Java代碼交付給操作系統(tǒng)底層進(jìn)行解析編譯,而是采用了JDK來(lái)對(duì)Java代碼進(jìn)行編譯,編譯成dotClass文件后,將dotClass文件轉(zhuǎn)交至JRE中。(dotClass其實(shí)就是.class)

在這里插入圖片描述

jre也就是JavaRunTimeEnvironment,java運(yùn)行環(huán)境,因?yàn)樵谶@里,存在著Java的秘密武器,也就是JVM!Jvm是組成JRE的重要核心,可以說(shuō),JVM是JRE的靈魂,控制著軀殼執(zhí)行著代碼的藝術(shù)。JRE中包含著Jvm調(diào)用所需要的幾乎所有類(lèi)庫(kù),可以這么說(shuō),jvm是jre的驅(qū)動(dòng),也是整個(gè)JDK的驅(qū)動(dòng),更是整個(gè)Java的驅(qū)動(dòng)!

大家好,我是fntp,今天我們來(lái)簡(jiǎn)單聊一聊為什么Java需要JVM,今天的話題很大,但是限制于篇幅我們只是簡(jiǎn)單的聊一聊!

JVM的快速理解

JVM 是Java 虛擬機(jī),即Java Virtual Machine的意思,“虛擬”這兩個(gè)字,基本上也可以看出,要想在操作系統(tǒng)上實(shí)現(xiàn)眾多的功能,是需要一個(gè)架構(gòu)完整,執(zhí)行力很強(qiáng)的執(zhí)行標(biāo)準(zhǔn)!這是不是有點(diǎn)類(lèi)似于“操作系統(tǒng)”?JVM,實(shí)則就是一個(gè)Java指令執(zhí)行規(guī)范,正是這一標(biāo)準(zhǔn)構(gòu)成了JVM。我們學(xué)Java的時(shí)候我們都知道有JDK,JRE,當(dāng)我們學(xué)的深入的時(shí)候,我們又會(huì)發(fā)現(xiàn),還有JVM這號(hào)神仙。。。

我們先捋清楚這些東西之間的關(guān)系:
我先給出答案:JDK是包含JRE的,JRE是包含JVM的。

在這里插入圖片描述

JDK我們都知道是java開(kāi)發(fā)工具包,正所謂工具包,也是因?yàn)樗闹饕饔檬菫閖vm提供了額外的類(lèi)庫(kù)工具,比如編譯Java文件的javac二進(jìn)制程序,這些都是存儲(chǔ)在bin目錄下,是不是很奇怪,為什么很多程序安裝的時(shí)候都帶有一個(gè)bin目錄?因?yàn)檫@個(gè)bin是binary的意思,是binary的簡(jiǎn)寫(xiě)bin,也就是二進(jìn)制文件的目錄。

在這里插入圖片描述

類(lèi)似的小工具除了Javac還有Java(bin目錄下的.exe二進(jìn)制文件)、jar等文件。好,那么jre呢?JRE是為Java程序提供執(zhí)行環(huán)境的,有了jre,我們的java程序就可以在瀏覽器中運(yùn)行了。為什么需要jre呢?因?yàn)槲覀兊膉vm,我們之前都知道java是一次編譯到處運(yùn)行,這是怎么辦到的?

這其實(shí)是jre的功勞,我們的jre中文不就是java運(yùn)行時(shí)環(huán)境嗎,不錯(cuò),我們知道java是運(yùn)行在jvm中的,java運(yùn)行時(shí)環(huán)境不就是jvm的運(yùn)行環(huán)境嗎,俗話說(shuō)巧婦難為無(wú)米之炊,光有jvm是不可能執(zhí)行的了所有的java程序的,還需要以來(lái)一些底層的c語(yǔ)言寫(xiě)的類(lèi)庫(kù),這時(shí)候,jre的左右就很明顯了,jre為jvm提供了幾乎所有的依賴(lài)類(lèi)庫(kù),這樣一來(lái),就真正實(shí)現(xiàn)了一次編譯到處運(yùn)行!

在這里插入圖片描述

jvm能執(zhí)行java程序,是直接執(zhí)行java文件嗎?不是,我們說(shuō)過(guò),Java與操作系統(tǒng)之間不是直接將.java文件轉(zhuǎn)交給操作系統(tǒng)處理的,而是將.java文件通過(guò)javac二進(jìn)制文件編譯成.class文件,也稱(chēng)之為字節(jié)碼文件,字節(jié)碼文件直接給操作系統(tǒng)執(zhí)行嗎?并不是,我們來(lái)看看普通程序與Java程序執(zhí)行區(qū)別在哪里:

在這里插入圖片描述

而Java程序的加載過(guò)程:

在這里插入圖片描述

什么意思,意思就是告訴你,字節(jié)碼文件操作系統(tǒng)也是不認(rèn)識(shí)的,字節(jié)碼文件還需要經(jīng)過(guò)jvm加載為機(jī)器碼,也就是Opcode操作碼(暫時(shí)這么理解因?yàn)椴蝗牵?,翻譯成機(jī)器碼也就是操作系統(tǒng)能看得懂的語(yǔ)言后,操作系統(tǒng)才回去執(zhí)行這個(gè)java程序,這是什么,這其實(shí)有點(diǎn)像我們常說(shuō)的黑盒測(cè)試,整個(gè)流程我們是看不見(jiàn)的,我們只能看見(jiàn)我們編寫(xiě)的java規(guī)范編碼被操作系統(tǒng)執(zhí)行了!

在這里插入圖片描述

我們說(shuō),jvm識(shí)別字節(jié)碼文件后,翻譯了字節(jié)碼指令,翻譯給操作系統(tǒng),從而控制操作系統(tǒng)去執(zhí)行相應(yīng)的功能,所以,提及翻譯,就不得不簡(jiǎn)單說(shuō)一下JVM的翻譯字節(jié)碼文件的方式方法了,jvm翻譯字節(jié)碼常見(jiàn)的有兩種不同的方式,一種是即時(shí)加載方法,一種是解釋執(zhí)行。解釋執(zhí)行是將字節(jié)碼文件中的opcode與操作數(shù)翻譯成op指令也就是機(jī)器代碼,而即時(shí)加載是在特定情況下才會(huì)觸發(fā),將字節(jié)碼翻譯成機(jī)器碼后執(zhí)行。你若想知道字節(jié)碼文件都包含有什么,那么等我吃透了jvm我加你好友啊,我跟你暢談啊!雖然這得等到=猴年馬月…

在這里插入圖片描述

好了今天的淺談就到這里了,所以,為什么需要jvm知道了嗎?
jvm即是對(duì)字節(jié)碼文件規(guī)范的最佳約束,也是java建立與操作系統(tǒng)之間溝通的直接橋梁!因?yàn)椴僮飨到y(tǒng)是無(wú)法直接編譯.java文件的,.java文件經(jīng)過(guò)javac程序轉(zhuǎn)為字節(jié)碼文件進(jìn)而被jvm翻譯為機(jī)器碼,只有機(jī)器碼操作系統(tǒng)才認(rèn)識(shí)?。?/p>

以上就是java為什么需要虛擬機(jī)jvm原理詳解的詳細(xì)內(nèi)容,更多關(guān)于java虛擬機(jī)jvm原理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot中注冊(cè)Bean的方式總結(jié)

    SpringBoot中注冊(cè)Bean的方式總結(jié)

    這篇文章主要介紹了SpringBoot中注冊(cè)Bean的方式總結(jié),@ComponentScan + @Componet相關(guān)注解,@Bean,@Import和spring.factories這四種方式,文中代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Java泛型定義與用法入門(mén)示例

    Java泛型定義與用法入門(mén)示例

    這篇文章主要介紹了Java泛型定義與用法,結(jié)合實(shí)例形式分析了java泛型的功能、定義、應(yīng)用場(chǎng)景及相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • spring中REST和RESTful的區(qū)別以及基本實(shí)現(xiàn)

    spring中REST和RESTful的區(qū)別以及基本實(shí)現(xiàn)

    本文主要介紹了spring中REST和RESTful的區(qū)別以及基本實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • spring?boot?mybatis日志輸出到控制臺(tái)的方法實(shí)踐

    spring?boot?mybatis日志輸出到控制臺(tái)的方法實(shí)踐

    在開(kāi)發(fā)過(guò)程中我們往往需要打印出SQL語(yǔ)句,這樣就方便我們監(jiān)控問(wèn)題,本文主要介紹了spring?boot?mybatis日志輸出到控制臺(tái)的方法實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 解決springboot報(bào)錯(cuò)Failed?to?parse?multipart?servlet?request;?nested?exception?is?java.io.IOException問(wèn)題

    解決springboot報(bào)錯(cuò)Failed?to?parse?multipart?servlet?request

    在使用SpringBoot開(kāi)發(fā)時(shí),通過(guò)Postman發(fā)送POST請(qǐng)求,可能會(huì)遇到因臨時(shí)目錄不存在而導(dǎo)致的MultipartException異常,這通常是因?yàn)镺S系統(tǒng)(如CentOS)定期刪除/tmp目錄下的臨時(shí)文件,解決方案包括重啟項(xiàng)目
    2024-10-10
  • Kotlin 語(yǔ)言中調(diào)用 JavaScript 方法實(shí)例詳解

    Kotlin 語(yǔ)言中調(diào)用 JavaScript 方法實(shí)例詳解

    這篇文章主要介紹了Kotlin 語(yǔ)言中調(diào)用 JavaScript 方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • MyEclipse8.6首次運(yùn)行maven項(xiàng)目圖標(biāo)上沒(méi)有小M的標(biāo)識(shí)怎么解決

    MyEclipse8.6首次運(yùn)行maven項(xiàng)目圖標(biāo)上沒(méi)有小M的標(biāo)識(shí)怎么解決

    myeclipse8.6導(dǎo)入maven項(xiàng)目后識(shí)別為普通java項(xiàng)目,即項(xiàng)目圖標(biāo)上沒(méi)有小M的標(biāo)識(shí)。這時(shí)是無(wú)法直接運(yùn)行的,怎么解決這一問(wèn)題呢?下面小編給大家?guī)?lái)了解決方案,需要的朋友參考下吧
    2016-11-11
  • jvm調(diào)優(yōu)的幾種場(chǎng)景(小結(jié))

    jvm調(diào)優(yōu)的幾種場(chǎng)景(小結(jié))

    本文主要介紹了jvm調(diào)優(yōu)的幾種場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java 多態(tài)性詳解及簡(jiǎn)單實(shí)例

    java 多態(tài)性詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 多態(tài)性詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java切分字符串的2種方法實(shí)例

    java切分字符串的2種方法實(shí)例

    在我們?nèi)粘9ぷ髦薪?jīng)常遇到截取字符串的需求,下面這篇文章主要給大家介紹了關(guān)于java切分字符串的2種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論

新郑市| 抚州市| 祁门县| 土默特右旗| 吐鲁番市| 竹北市| 南川市| 临猗县| 会泽县| 龙山县| 曲水县| 隆回县| 永善县| 金平| 吴江市| 佛冈县| 毕节市| 岢岚县| 龙泉市| 蓝山县| 济南市| 临沭县| 吴江市| 和田县| 镇安县| 墨脱县| 延安市| 米脂县| 广饶县| 洮南市| 怀柔区| 麻江县| 高唐县| 永年县| 化州市| 汪清县| 桂平市| 介休市| 云安县| 东辽县| 马山县|