欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java為什么需要虛擬機jvm原理詳解

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

JVM的快速理解

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

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

在這里插入圖片描述

JDK我們都知道是java開發(fā)工具包,正所謂工具包,也是因為他的主要作用是為jvm提供了額外的類庫工具,比如編譯Java文件的javac二進制程序,這些都是存儲在bin目錄下,是不是很奇怪,為什么很多程序安裝的時候都帶有一個bin目錄?因為這個bin是binary的意思,是binary的簡寫bin,也就是二進制文件的目錄。

在這里插入圖片描述

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

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

在這里插入圖片描述

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

在這里插入圖片描述

而Java程序的加載過程:

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

相關文章

  • mybatis-plus內(nèi)置雪花算法主鍵重復問題解決

    mybatis-plus內(nèi)置雪花算法主鍵重復問題解決

    本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式

    ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式

    這篇文章主要介紹了ByteArrayOutputStream與InputStream互相轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 非常全面的Java?SpringBoot點贊功能實現(xiàn)

    非常全面的Java?SpringBoot點贊功能實現(xiàn)

    但是這些功能再項目中是高頻出現(xiàn)的,如果直接操作數(shù)據(jù)庫的話,對數(shù)據(jù)庫壓力太大。那遇到這個問題怎么解決?這篇文章主要給大家介紹了關于Java?SpringBoot點贊功能實現(xiàn)?的相關資料,需要的朋友可以參考下
    2022-01-01
  • JVM處理未捕獲異常的方法詳解

    JVM處理未捕獲異常的方法詳解

    這篇文章主要給大家介紹了關于JVM處理未捕獲異常的相關資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Spring中的PathVariable注釋解析

    Spring中的PathVariable注釋解析

    這篇文章主要介紹了Spring中的PathVariable注釋用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談JSONObject的使用及示例代碼(JSON解析)

    淺談JSONObject的使用及示例代碼(JSON解析)

    這篇文章主要介紹了淺談JSONObject的使用及示例代碼(JSON解析),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java隨機生成字符串(字符隨機生成類 生成隨機字符組合)

    java隨機生成字符串(字符隨機生成類 生成隨機字符組合)

    java隨機生成字符串,字符組合多樣,可以大小字組合、大+小字符+數(shù)字等方式,大家參考使用吧
    2013-12-12
  • Spring Data環(huán)境搭建實現(xiàn)過程解析

    Spring Data環(huán)境搭建實現(xiàn)過程解析

    這篇文章主要介紹了Spring Data環(huán)境搭建實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot@Aspect 打印訪問請求和返回數(shù)據(jù)方式

    SpringBoot@Aspect 打印訪問請求和返回數(shù)據(jù)方式

    這篇文章主要介紹了SpringBoot@Aspect 打印訪問請求和返回數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實現(xiàn)文件檢索系統(tǒng)的示例代碼

    Java實現(xiàn)文件檢索系統(tǒng)的示例代碼

    這篇文章主要為大家詳細介紹了如何劉Java語言實現(xiàn)簡易的文件檢索系統(tǒng),文中的示例代碼講解詳細,對我們學習Java開發(fā)有一定的幫助,需要的可以參考一下
    2022-07-07

最新評論