更新時(shí)間:2021-05-13 16:20:23 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1599次
虛擬機(jī)是一種抽象化的計(jì)算機(jī),通過在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來實(shí)現(xiàn)的。Java虛擬機(jī)有自己完善的硬體架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。Java虛擬機(jī)屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。
所謂的Java虛擬機(jī),就是一臺(tái)虛擬的機(jī)器。它是一款軟件,用來執(zhí)行一系列虛擬計(jì)算機(jī)指令,大體上虛擬機(jī)可以分為系統(tǒng)虛擬機(jī)和程序虛擬機(jī)。visual Box、VMare就屬于系統(tǒng)虛擬機(jī)。他們完全是對(duì)物理計(jì)算機(jī)的仿真,提供一個(gè)可運(yùn)行完整操作系統(tǒng)的軟件平臺(tái)。而Java虛擬機(jī)就是典型程序虛擬機(jī),它專門為執(zhí)行單個(gè)計(jì)算機(jī)程序而設(shè)計(jì),在Java虛擬機(jī)中執(zhí)行的指令我們稱之為Java字節(jié)碼指令。Java發(fā)展到今天,出現(xiàn)了很多虛擬機(jī),最初sun使用的叫Classic的Java虛擬機(jī),到現(xiàn)在使用最廣泛的是HotSpot虛擬機(jī),除了sun以外還有BEA的JRockit,目前JRockit和HotSpot都被甲骨文公司收入旗下,大有整合的趨勢(shì)。
Java虛擬機(jī)的基本結(jié)構(gòu)


1. 類加載子系統(tǒng):負(fù)責(zé)從文件系統(tǒng)或者網(wǎng)絡(luò)中加載class信息,加載的信息放在一起稱之為方法去的內(nèi)存空間。
2. 方法區(qū):就是存放類信息.常量信息.常量池信息.字符串字面量和數(shù)字常量等。
3. Java堆:在Java虛擬機(jī)啟動(dòng)的時(shí)候建立Java堆,它是Java程序最主要的內(nèi)存工作區(qū)域,幾乎所有的對(duì)象實(shí)例都存放在Java堆中,堆空間是所有線程共享的。
4. 直接內(nèi)存:Java的NIO庫(kù)允許Java程序使用直接內(nèi)存,從而提高性能,通常直接內(nèi)存速度會(huì)優(yōu)于Java堆。讀寫頻繁的場(chǎng)合可能會(huì)考慮使用。
5. Java棧:每個(gè)虛擬機(jī)線程都有一個(gè)私有的棧,一個(gè)線程的Java棧在線程創(chuàng)建的時(shí)候被創(chuàng)建,Java棧中保存著局部變量.方法參數(shù).還有Java的調(diào)用方法和返回值等。
6. 本地方法棧:與Java棧很類似,最大不同是本地方法棧用于本地方法調(diào)用。Java虛擬機(jī)允許Java直接調(diào)用本地方法(通常本地方法為C語(yǔ)言編寫)
7. 垃圾回收系統(tǒng):是Java的核心,也是必不可少的,Java有一套自己進(jìn)行垃圾清理的機(jī)制,開發(fā)者無(wú)需手動(dòng)清理。
8. PC寄存器:是每個(gè)線程私有的空間,Java虛擬機(jī)會(huì)為每個(gè)線程創(chuàng)建PC寄存器,在任意時(shí)刻,一個(gè)Java線程總是在執(zhí)行一個(gè)方法,這個(gè)方法被稱為當(dāng)前方法,如果當(dāng)前方法不是本地方法,PC寄存器就會(huì)執(zhí)行當(dāng)前正在被執(zhí)行的指令,如果是本地方法,則PC寄存器的值為undefined。寄存器存放如當(dāng)前執(zhí)行環(huán)境指針.程序計(jì)數(shù)器.操作棧指針.計(jì)算的變量指針等信息。
9. 執(zhí)行引擎:虛擬機(jī)最核心的就是執(zhí)行引擎了,它負(fù)責(zé)執(zhí)行虛擬機(jī)的字節(jié)碼。一般用戶先編譯成機(jī)器碼后執(zhí)行。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“什么是Java虛擬機(jī)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)