您好,歡迎來(lái)到賦能網(wǎng)!

Java跨平臺(tái)運(yùn)行的原理

賦能網(wǎng) 2023-05-10 88


java跨平臺(tái)運(yùn)行的原理

      Java跨平臺(tái)運(yùn)行的原理,Java能進(jìn)行進(jìn)行跨平臺(tái)運(yùn)行主要是源于JVM(Java Virtual Machine,Java虛擬機(jī)),是通過(guò)JVM實(shí)現(xiàn)了特定平臺(tái)下的Java解釋器,Java字節(jié)碼就可以通過(guò)解釋器在該平臺(tái)下執(zhí)行,這就是Java跨平臺(tái)的根本。

      1、Java源文件的編譯過(guò)程

      Java跨平臺(tái)運(yùn)行的原理,Java應(yīng)用程序的開(kāi)發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個(gè)部分。Java編譯器將Java源程序翻譯為JVM可執(zhí)行的代碼—字節(jié)碼。這一編譯過(guò)程與C/C++的編譯有些不同,C/C++編譯器生成的代碼是針對(duì)某一硬件平臺(tái)的代碼。

      因此,在編譯過(guò)程中,編譯器通過(guò)查表將所有對(duì)符號(hào)的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序的正確運(yùn)行。

      而Java編譯器則不會(huì)把對(duì)變量和方法的引用編譯為數(shù)值引用,也不確定程序運(yùn)行過(guò)程中的內(nèi)存布局,而是將這些符號(hào)引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行時(shí)去創(chuàng)建內(nèi)存布局,然后再通過(guò)查表來(lái)確定一個(gè)方法所在的地址,這樣就有效地保證了Java的可移植性和安全性。

      2、Java解釋器運(yùn)行機(jī)制

      運(yùn)行字節(jié)碼的工作是由解釋器來(lái)完成的。解釋執(zhí)行過(guò)程分為三步:代碼裝入、代碼校驗(yàn)、代碼執(zhí)行。

      代碼裝入的工作由類(lèi)加載器(Class Loader)來(lái)完成。類(lèi)加載器負(fù)責(zé)加載運(yùn)行程序所需要的所有代碼。當(dāng)類(lèi)加載器加載一個(gè)類(lèi)之后,類(lèi)被放在自己的名字空間中,除了通過(guò)符號(hào)引用自己名字空間以外的類(lèi),類(lèi)與類(lèi)之間沒(méi)有其他辦法可以相互影響。

      當(dāng)加載了運(yùn)行程序所需要的所有類(lèi)之后,解釋器便可以確定整個(gè)可執(zhí)行程序的內(nèi)存布局,并為符號(hào)引用同特定地址空間建立對(duì)應(yīng)關(guān)系查詢(xún)表。

      通過(guò)在這一階段確定代碼的內(nèi)存布局,Java很好地解決了由于基類(lèi)改變而導(dǎo)致子類(lèi)崩潰的問(wèn)題,同時(shí)也防止了代碼對(duì)地址的非法訪(fǎng)問(wèn)。

      當(dāng)代碼被裝入之后,字節(jié)碼校驗(yàn)器開(kāi)始對(duì)字節(jié)碼進(jìn)行檢查。校驗(yàn)器可以發(fā)現(xiàn)操作數(shù)棧的溢出和非法數(shù)據(jù)類(lèi)型轉(zhuǎn)換等多種錯(cuò)誤。在校驗(yàn)通過(guò)后,Java代碼便開(kāi)始執(zhí)行了。

      3、Java字節(jié)碼的執(zhí)行方式

      Java在執(zhí)行字節(jié)碼時(shí)有兩種方式:即時(shí)編譯方式和解釋執(zhí)行方式。即時(shí)編譯方式(JITJust In Time)先將字節(jié)碼編譯成機(jī)器碼,再執(zhí)行機(jī)器碼。這種運(yùn)行方式的優(yōu)點(diǎn)是執(zhí)行經(jīng)過(guò)二次編譯后的機(jī)器碼可以提高程序的執(zhí)行速度。

      解釋執(zhí)行方式是解釋器通過(guò)每次解釋?zhuān)?zhí)行一小段代碼來(lái)完成Java字節(jié)碼程序的所有操作。比如,若Java字節(jié)碼要對(duì)兩個(gè)數(shù)值進(jìn)行加法操作,則解釋器調(diào)用自身的一段代碼來(lái)完成加法操作。

  想了解更多相關(guān)資訊請(qǐng)關(guān)注java培訓(xùn)頻道-查看更多,了解相關(guān)專(zhuān)業(yè)課程信息您可在線(xiàn)咨詢(xún)也可免費(fèi)申請(qǐng)?jiān)囌n。關(guān)注賦能網(wǎng)了解更多:4008-569-579

本文鏈接:

本文章“Java跨平臺(tái)運(yùn)行的原理”已幫助 88 人

免責(zé)聲明:本信息由用戶(hù)發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開(kāi)班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢(xún)熱線(xiàn):4008-569-579

如果本頁(yè)不是您要找的課程,您也可以百度查找一下: