02虛擬機(jī)介紹及常見(jiàn)的JVM
時(shí)間:2023-05-19 00:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-19 00:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
02虛擬機(jī)介紹及常見(jiàn)的JVM:
02虛擬機(jī)介紹及常見(jiàn)的JVMhttps://www.zhihu.com/video/13966265662526504961.JVM虛擬機(jī)介紹
- 虛擬機(jī)概念:
虛擬機(jī)(Virtual Machine)指通過(guò)軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。在實(shí)體計(jì)算機(jī)中能夠完成的工作在虛擬機(jī)中都能夠?qū)崿F(xiàn)。在計(jì)算機(jī)中創(chuàng)建虛擬機(jī)時(shí),需要將實(shí)體機(jī)的部分硬盤(pán)和內(nèi)存容量作為虛擬機(jī)的硬盤(pán)和內(nèi)存容量。每個(gè)虛擬機(jī)都有獨(dú)立的CMOS、硬盤(pán)和操作系統(tǒng),可以像使用實(shí)體機(jī)一樣對(duì)虛擬機(jī)進(jìn)行操作。 - 關(guān)鍵字理解:
- 虛擬機(jī)分類(lèi)
- Linux虛擬機(jī)
一種安裝在Windows上的虛擬linux操作環(huán)境,就被稱(chēng)為linux虛擬機(jī)。它實(shí)際上只是個(gè)文件而已,是虛擬的linux環(huán)境,而非真正意義上的操作系統(tǒng)。但是它們的實(shí)際效果是一樣的。所以安裝在虛擬機(jī)上使用好。常用安裝虛擬機(jī)軟件有:vmware、VirtualBox等。 - Java虛擬機(jī)
Java虛擬機(jī)(JVM)是Java Virtual Machine的縮寫(xiě),它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能模擬來(lái)實(shí)現(xiàn)的。Java虛擬機(jī)有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。
- Java虛擬機(jī)的優(yōu)點(diǎn)
Java語(yǔ)言的一個(gè)非常重要的特點(diǎn)就是與平臺(tái)的無(wú)關(guān)性。而使用Java虛擬機(jī)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。一般的高級(jí)語(yǔ)言如果要在不同的平臺(tái)上運(yùn)行,至少需要編譯成不同的目標(biāo)代碼。而引入Java語(yǔ)言虛擬機(jī)后,Java語(yǔ)言在不同平臺(tái)上運(yùn)行時(shí)不需要重新編譯。Java語(yǔ)言使用Java虛擬機(jī)屏蔽了與具體平臺(tái)相關(guān)的信息,使得Java語(yǔ)言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。
一句話(huà)就是:一次編譯,到處運(yùn)行,并且具備自動(dòng)內(nèi)存管理+自動(dòng)垃圾回收功能
- 總結(jié)
Java虛擬機(jī)是Java語(yǔ)言底層實(shí)現(xiàn)的基礎(chǔ),對(duì)Java語(yǔ)言感興趣的人都應(yīng)對(duì)Java虛擬機(jī)有個(gè)大概的了解。這有助于理解Java語(yǔ)言的一些性質(zhì),也有助于使用Java語(yǔ)言。對(duì)于要在特定平臺(tái)上實(shí)現(xiàn)Java虛擬機(jī)的軟件人員,Java語(yǔ)言的編譯器作者以及要用硬件芯片實(shí)現(xiàn)Java虛擬機(jī)的人來(lái)說(shuō),則必須深刻理解Java虛擬機(jī)的規(guī)范。另外,如果想擴(kuò)展Java語(yǔ)言,或是把其它語(yǔ)言編譯成Java語(yǔ)言的字節(jié)碼,也需要深入地了解Java虛擬機(jī)。
2.常見(jiàn)的JVM
很多公司都有自己的JVM,比如Orcale的HotSpot,也是我們學(xué)習(xí)和使用的重點(diǎn)JVM虛擬機(jī)。
【其他兩款特殊虛擬機(jī)介紹】
- Sun Classic VM介紹:
早在1996年Java1.0版本的時(shí)候,SUN公司就發(fā)布了一款名為SUN Classic VM的Java 虛擬機(jī),同時(shí)也是世界上第一款商用Java虛擬機(jī),JDK1.4時(shí)完全被淘汰。這款虛擬機(jī)內(nèi)部只提供解釋器,如果使用JIT編譯器,就需要進(jìn)行外掛。但是一旦使用了JIT編譯器,JIT就會(huì)接管虛擬機(jī)的執(zhí)行系統(tǒng),解釋器就不再工作。 解釋器和編譯器不能配合工作。
現(xiàn)在hotspot已經(jīng)內(nèi)置了此虛擬機(jī)。 - Dalvik VM:
谷歌開(kāi)發(fā)的應(yīng)用于Android系統(tǒng)的虛擬機(jī),并在Android2.2中提供了JIT,發(fā)展迅猛。
Dalvik VM 并不能直接執(zhí)行Java的Class文件,因?yàn)槠洳](méi)有遵循Java虛擬機(jī)的規(guī)范,它是基于寄存器結(jié)構(gòu)而不是jvm的棧架構(gòu),因此其執(zhí)行的是編譯以后的dex(Dalvik Executable)文件【可以通過(guò)Class文件進(jìn)行轉(zhuǎn)化】,執(zhí)行效率較高。
Android5.0使用了支持提前編譯(Ahead of Time Compilation,AOT)的ART VM替換Dalvik VM。
我們的學(xué)習(xí)路線圖就通過(guò)從一個(gè)類(lèi)的加載開(kāi)始,來(lái)學(xué)習(xí)Java是如何將代碼運(yùn)行起來(lái)的,由點(diǎn)到面的方式,一步一步深入理解JVM的整體運(yùn)行機(jī)制。