摘要:此處指定的虛擬機(jī)與平臺(tái)兼容,并支持語(yǔ)言規(guī)范中指定的編程語(yǔ)言。第章說明了虛擬機(jī)的指令集,按字母順序顯示操作碼助記符。
介紹 一點(diǎn)歷史
Java?編程語(yǔ)言是一種通用的、并發(fā)的、面向?qū)ο蟮恼Z(yǔ)言,它的語(yǔ)法類似于C和C++,但它省略了許多使C和C++復(fù)雜、混亂和不安全的特性。最初開發(fā)Java平臺(tái)是為了解決為聯(lián)網(wǎng)的消費(fèi)者設(shè)備構(gòu)建軟件的問題,它旨在支持多種主機(jī)架構(gòu),并允許安全交付軟件組件,為了滿足這些要求,編譯后的代碼必須能夠在網(wǎng)絡(luò)上傳輸,在任何客戶端上運(yùn)行,并向客戶端保證運(yùn)行安全。
萬(wàn)維網(wǎng)的普及使這些屬性更加有趣,Web瀏覽器使數(shù)百萬(wàn)人能夠以簡(jiǎn)單的方式上網(wǎng)并訪問富媒體內(nèi)容,最后有一種介質(zhì),無論你使用的是什么機(jī)器,還是連接到快速網(wǎng)絡(luò)或慢速調(diào)制解調(diào)器,你所看到和聽到的內(nèi)容基本相同。
網(wǎng)絡(luò)愛好者很快發(fā)現(xiàn)網(wǎng)絡(luò)HTML文檔格式支持的內(nèi)容太有限了,HTML擴(kuò)展(例如表單)只突出了這些限制,同時(shí)明確表示沒有瀏覽器可以包含用戶想要的所有功能,可擴(kuò)展性就是答案。
HotJava瀏覽器首先展示了Java編程語(yǔ)言和平臺(tái)的有趣屬性,使在HTML頁(yè)面中嵌入程序成為可能,程序與它們出現(xiàn)的HTML頁(yè)面一起透明地下載到瀏覽器中,在被瀏覽器接受之前,會(huì)仔細(xì)檢查程序以確保它們是安全的。與HTML頁(yè)面一樣,編譯的程序與網(wǎng)絡(luò)和主機(jī)無關(guān),程序的行為方式相同,無論它們來自何處,或者它們被裝入和運(yùn)行的機(jī)器類型。
包含Java平臺(tái)的Web瀏覽器不再局限于預(yù)定的一組功能,包含動(dòng)態(tài)內(nèi)容的網(wǎng)頁(yè)的訪問者可以確保他們的機(jī)器不會(huì)被該內(nèi)容損壞,程序員可以編寫程序一次,它將在任何提供Java運(yùn)行時(shí)環(huán)境的機(jī)器上運(yùn)行。
Java虛擬機(jī)Java虛擬機(jī)是Java平臺(tái)的基石,它是該技術(shù)的組成部分,負(fù)責(zé)其硬件和操作系統(tǒng)的獨(dú)立性,其編譯的代碼很小以及保護(hù)用戶免受惡意程序攻擊的能力。
Java虛擬機(jī)是一種抽象計(jì)算機(jī),像真正的計(jì)算機(jī)一樣,它有一個(gè)指令集并在運(yùn)行時(shí)操作各種內(nèi)存區(qū)域,使用虛擬機(jī)實(shí)現(xiàn)編程語(yǔ)言是相當(dāng)普遍的,最著名的虛擬機(jī)可能是UCSD Pascal的P-Code機(jī)器。
在Sun Microsystems,Inc.完成的Java虛擬機(jī)的第一個(gè)原型實(shí)現(xiàn)模擬了由類似于當(dāng)代個(gè)人數(shù)字助理(PDA)的手持設(shè)備托管的軟件中的Java虛擬機(jī)指令集。Oracle當(dāng)前的實(shí)現(xiàn)模擬在移動(dòng)、桌面和服務(wù)器設(shè)備上的Java虛擬機(jī),但Java虛擬機(jī)不承擔(dān)任何特定的實(shí)現(xiàn)技術(shù)、主機(jī)硬件或主機(jī)操作系統(tǒng),它本身并沒有被解釋,但也可以通過將其指令集編譯為硅CPU來實(shí)現(xiàn),它也可以用微代碼實(shí)現(xiàn)或直接用硅實(shí)現(xiàn)。
Java虛擬機(jī)不知道Java編程語(yǔ)言,只知道特定的二進(jìn)制格式,即class文件格式,class文件包含Java虛擬機(jī)指令(或字節(jié)碼)和符號(hào)表,以及其他輔助信息。
出于安全考慮,Java虛擬機(jī)對(duì)class文件中的代碼施加了強(qiáng)大的語(yǔ)法和結(jié)構(gòu)約束,但是,任何具有可以用有效class文件表示的功能的語(yǔ)言都可以由Java虛擬機(jī)托管,由通用的、與機(jī)器無關(guān)的平臺(tái)吸引,其他語(yǔ)言的實(shí)現(xiàn)者可以將Java虛擬機(jī)作為其語(yǔ)言的交付工具。
此處指定的Java虛擬機(jī)與Java SE 11平臺(tái)兼容,并支持Java語(yǔ)言規(guī)范Java SE 11 Edition中指定的Java編程語(yǔ)言。
規(guī)范的組織第2章概述了Java虛擬機(jī)架構(gòu)。
第3章介紹用Java編程語(yǔ)言編寫的代碼編譯成Java虛擬機(jī)指令集。
第4章說明了class文件格式,這是一種獨(dú)立于硬件和操作系統(tǒng)的二進(jìn)制格式,用于表示已編譯的類和接口。
第5章說明了Java虛擬機(jī)的啟動(dòng)以及類和接口的加載、鏈接和初始化。
第6章說明了Java虛擬機(jī)的指令集,按字母順序顯示操作碼助記符。
第7章給出了一個(gè)由操作碼值索引的Java虛擬機(jī)操作碼助記符表。
在Java?虛擬機(jī)規(guī)范的第二版中,第2章概述了Java編程語(yǔ)言,該語(yǔ)言旨在支持Java虛擬機(jī)的規(guī)范,但它本身并不是規(guī)范的一部分。在Java虛擬機(jī)規(guī)范Java SE 11 Edition中,有關(guān)Java編程語(yǔ)言的信息,請(qǐng)參閱Java語(yǔ)言規(guī)范Java SE 11 Edition。
在Java?虛擬機(jī)規(guī)范的第二版中,第8章詳細(xì)介紹了解釋Java虛擬機(jī)線程與共享主內(nèi)存交互的低級(jí)別操作,在Java虛擬機(jī)規(guī)范Java SE 11 Edition中,讀者可以參考Java語(yǔ)言規(guī)范的第17章,Java SE 11 Edition,了解有關(guān)線程和鎖的信息,第17章反映了JSR 133專家組制作的Java內(nèi)存模型和線程規(guī)范。
符號(hào)在整個(gè)規(guī)范中,引用了從Java SE Platform API中提取的類和接口,每當(dāng)使用單個(gè)標(biāo)識(shí)符N引用類或接口(除了在示例中聲明的那些之外),預(yù)期的引用是包java.lang中名為N的類或接口,使用java.lang以外的包中的類或接口的完全限定名。
每當(dāng)引用在包java或其任何子包中聲明的類或接口時(shí),預(yù)期的引用都是由引導(dǎo)類加載器加載的類或接口。
每當(dāng)引用名為java的包的子包時(shí),預(yù)期的引用就是由引導(dǎo)類加載器確定的子包。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73501.html
摘要:下面的截圖內(nèi)容來自從規(guī)范我們可以看到,規(guī)范要求的運(yùn)行時(shí)數(shù)據(jù)區(qū)域有程序計(jì)數(shù)器虛擬機(jī)棧堆方法區(qū)本地方法棧運(yùn)行時(shí)常量池這及部分。查了一下,還是沒有查到官方對(duì)于運(yùn)行時(shí)數(shù)據(jù)區(qū)域的說明,但是許多博客都指出將字符串常量池移動(dòng)到了堆中。 不少java程序員一提JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)域,就會(huì)說堆和棧,當(dāng)然也有java程序員給出方法區(qū)、虛擬機(jī)棧、本地方法棧、堆、程序計(jì)數(shù)器這個(gè)答案,但是還有人給出永久代、虛擬機(jī)...
摘要:虛擬機(jī)規(guī)范介紹虛擬機(jī)介紹虛擬機(jī)的結(jié)構(gòu)文件格式數(shù)據(jù)類型原始類型和值引用類型和值運(yùn)行時(shí)數(shù)據(jù)區(qū)幀對(duì)象的表示浮點(diǎn)算術(shù)特殊方法異常指令集匯總類庫(kù)公有設(shè)計(jì),私有實(shí)現(xiàn)編譯虛擬機(jī)格式示例使用常量局部變量和控制結(jié)構(gòu)算術(shù)訪問運(yùn)行時(shí)常量池更多控制示例接收參數(shù)調(diào)用 Java虛擬機(jī)規(guī)范 Java SE 12 Edition 介紹 Java虛擬機(jī)介紹 Java虛擬機(jī)的結(jié)構(gòu) class文件格式 數(shù)據(jù)類型 原始類型...
摘要:方法區(qū)在實(shí)際內(nèi)存空間站可以是不連續(xù)的。這一規(guī)定,可以說是給了虛擬機(jī)廠商很大的自由。但是值得注意的是,堆其實(shí)還未每一個(gè)線程單獨(dú)分配了一塊空間,這部分空間在分配時(shí)是線程獨(dú)享的,在使用時(shí)是線程共享的。 在我的博客中,之前有很多文章介紹過JVM內(nèi)存結(jié)構(gòu),相信很多看多我文章的朋友對(duì)這部分知識(shí)都有一定的了解了。 那么,請(qǐng)大家嘗試著回答一下以下問題: 1、JVM管理的內(nèi)存結(jié)構(gòu)是怎樣的? 2、不同的...
摘要:虛擬機(jī)在執(zhí)行程序的過程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。棧幀棧幀是用于支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),它是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)中的虛擬機(jī)棧的棧元素。棧幀的概念結(jié)構(gòu)如下運(yùn)行時(shí)數(shù)據(jù)區(qū)腦圖高 這里我們先說句題外話,相信大家在面試中經(jīng)常被問到介紹Java內(nèi)存模型,我在面試別人時(shí)也會(huì)經(jīng)常問這個(gè)問題。但是,往往都會(huì)令我比較尷尬,我還話音未落,面試者就會(huì)背誦一段(Java虛擬...
摘要:原始類型和值虛擬機(jī)支持的原始數(shù)據(jù)類型是數(shù)字類型布爾類型和類型。,其值為位帶符號(hào)的二進(jìn)制補(bǔ)碼整數(shù),其默認(rèn)值為零。 Java虛擬機(jī)的結(jié)構(gòu) 本文檔指定了一個(gè)抽象機(jī)器,它沒有描述Java虛擬機(jī)的任何特定實(shí)現(xiàn)。 要正確實(shí)現(xiàn)Java虛擬機(jī),你只需要能夠讀取類文件格式并正確執(zhí)行其中指定的操作,不屬于Java虛擬機(jī)規(guī)范的實(shí)現(xiàn)細(xì)節(jié)會(huì)不必要地限制實(shí)現(xiàn)者的創(chuàng)造力。例如,運(yùn)行時(shí)數(shù)據(jù)區(qū)的內(nèi)存布局、使用的垃圾收集...
閱讀 3588·2021-09-13 10:28
閱讀 1937·2021-08-10 09:43
閱讀 1009·2019-08-30 15:44
閱讀 3178·2019-08-30 13:14
閱讀 1830·2019-08-29 16:56
閱讀 2938·2019-08-29 16:35
閱讀 2843·2019-08-29 12:58
閱讀 864·2019-08-26 13:46