JVM規(guī)格說明(Java8)-第一章:簡介

一點點歷史

Java是一門通用的,支持并發(fā)且面相對象的編程語言兑宇。它的語法和 C、C++ 有些類似粱坤,但是它舍棄了 C/C++ 中許多復(fù)雜隶糕、難以理解且不安全的特性。最初站玄,Java平臺是為了解決那些面向網(wǎng)絡(luò)用戶的應(yīng)用程序構(gòu)建問題枚驻。它旨在支持多種主機(jī)架構(gòu),并允許軟件組件的安全交付株旷。為了滿足這些需求再登,編譯后的代碼必須能通過網(wǎng)絡(luò)傳輸尔邓,并能保證在任意的客戶機(jī)上安全的運行。

隨著萬維網(wǎng)(World Wide Web)的普及锉矢,Java 的這些屬性變得更加有趣梯嗽。網(wǎng)絡(luò)瀏覽器使成千上萬的人能便捷的訪問各種豐富多彩的媒體內(nèi)容。無論你使用的是什么機(jī)器沽损,什么操作系統(tǒng)灯节,是快速網(wǎng)絡(luò)還是慢速的調(diào)制解調(diào)器(slow modem),WWW能保證每個人獲取到的信息是一樣的绵估。

網(wǎng)絡(luò)愛好者很快發(fā)現(xiàn)HTML的格式支持的內(nèi)容太有限了炎疆。HTML的擴(kuò)展,例如表單壹士,僅僅是強調(diào)了這些限制磷雇,當(dāng)人們發(fā)現(xiàn)所有瀏覽器都無法同時包含用戶想要的所有特性。擴(kuò)展性變成了唯一的出路躏救。

HotJava(一種瀏覽器)因為使用了Java平臺,可以在HTML頁面中嵌入可執(zhí)行程序螟蒸。程序和HTML頁面一起下載到客戶的瀏覽器中盒使,再被瀏覽器解析之前,程序會仔細(xì)地檢查環(huán)境七嫌,確保安全少办。就像 HTML頁面一樣,編譯后的程序是網(wǎng)絡(luò)诵原,宿主機(jī)無關(guān)的英妓。同一個程序,無論它是通過什么途徑下載绍赛,也無論它是在什么樣的機(jī)器上被加載運行蔓纠,它們的行為總是一致的。

一個結(jié)合了Java平臺的Web瀏覽器不再局限于一組功能吗蚌。用戶在瀏覽動態(tài)內(nèi)容的網(wǎng)頁時腿倚,Java平臺可以確保他們的機(jī)器不會被破壞。開發(fā)者只需要把程序編譯一次蚯妇,就能在所有提供了Java運行環(huán)境的機(jī)器上執(zhí)行敷燎。


Java 虛擬機(jī)(JVM)

JVM是Java平臺的基礎(chǔ)。它從技術(shù)角度上使Java程序能夠跨硬件箩言,跨操作系統(tǒng)執(zhí)行硬贯。編譯后的代碼產(chǎn)物會很小,并且它能保證用戶不被惡意程序所影響陨收。

JVM是一個抽象的計算機(jī)器饭豹。就像一個真正的計算機(jī)一樣,它有指令集并且可以在運行時操控不通的內(nèi)存空間。在虛擬機(jī)上來實現(xiàn)一個編程語言是很常見的事墨状;最有名的虛擬機(jī)可能就是 UCSD Pascal 的 P-Code 了卫漫。

JVM的第一款原型是由 Sun公司實現(xiàn),emulated the Java Virtual Machine instruction set in software hosted by a handheld device that resembled a contemporary Personal Digital Assistant (PDA). Oracle當(dāng)前的實現(xiàn)可以在手機(jī)肾砂,桌面電腦與服務(wù)器中模擬JVM列赎,but the Java Virtual Machine does not assume any particular implementation technology, host hardware, or host operating system. It is not inherently interpreted, but can just as well be implemented by compiling its instruction set to that of a silicon CPU. It may also be implemented in microcode or directly in silicon.

JVM不關(guān)心Java語言的細(xì)節(jié),它只關(guān)心一個特定的二進(jìn)制格式镐确,class 文件包吝。一個 class 文件包含了JVM的指令(或者字節(jié)碼),一個符號表和其它的一些輔助信息源葫。

因為安全考慮诗越,JVM對class文件的語法與結(jié)構(gòu)有著嚴(yán)格的約束。但是息堂,只要能被編譯為一個有效的class文件嚷狞,任何編程語言都可以在JVM上運行。由于JVM的通用與跨平臺的特性荣堰,開發(fā)者可以基于JVM來實現(xiàn)自己的編程語言床未。

這里對JVM的所有說明與JAVA(SE8版本)平臺兼容,并支持在Java語言規(guī)范(SE 8版本)中的編程語言振坚。


文檔結(jié)構(gòu)

  • 第二章會對JVM架構(gòu)做一個整體介紹
  • 第三章會為大家介紹由Java語言編寫的代碼如何匯編成JVM的指令集
  • 第四章定義了被編譯后的類與接口 -- 即class 文件的格式--一種硬件與平臺無關(guān)的二進(jìn)制格式
  • 第五章定義了JVM如何啟動薇搁,加載,鏈接和如何對類和接口進(jìn)行初始化
  • 第六章定義了JVM的指令集渡八,指令會以操作碼助記符的字母順序排序
  • 第七章會列出JVM操作碼助記符的表格并以操作碼的值來作為索引

在第二版的JVM規(guī)范第二章中啃洋,概述了Java編程語言,該語言支持JVM規(guī)范屎鳍,但其本身并不是規(guī)范宏娄。在Java(SE8版本)的JVM規(guī)范中,讀者可以參考Java(SE8版本)的語言規(guī)范哥艇,來學(xué)習(xí)如何書寫Java代碼绝编。References of the form: (JLS §x.y) indicate where this is necessary.

在第二版JVM規(guī)范第八章中詳細(xì)說明了JVM線程與共享主內(nèi)存(shared main memory)交互的底層操作。而在JAVA(SE8版本)的JVM規(guī)范中貌踏,讀者可以參考Java(SE8版本)語言規(guī)范的第十七章十饥,了解有關(guān)線程和鎖的信息。第17章會對 JSR133專家組制定的Java內(nèi)存模型和線程規(guī)范進(jìn)行闡述祖乳。


一點點約定

本規(guī)范引用了來自 JavaSE平臺API的類和接口逗堵。在所有使用了(除了在例子中聲明的那些),標(biāo)記 N的地方眷昆,the intended reference is to the class or interface named N in the package java.lang. 除了java.lang以外蜒秤,從其它包引用的類或者接口汁咏,會使用全限定名。

每當(dāng)我們使用名為java的子包下的類或者接口的引用時作媚,那么我們會默認(rèn)其是由 bootstrap 類加載器來確定的攘滩。

在本規(guī)范中,某些特殊字體所代表的含義如下(見注1):

  • 固定寬度的字體用于JVM數(shù)據(jù)類型纸泡、Exception漂问、errors、類文件結(jié)構(gòu)女揭、Prolog code和Java代碼塊蚤假。
  • 斜體代表 JVM 匯編語言中的操作碼和操作數(shù),as well as items in the Java Virtual Machine's run-time data areas.同時也用于介紹新的特性或者表示強調(diào)吧兔。

用來額外闡述本規(guī)范內(nèi)容的非規(guī)范信息磷仰,會以較小的縮進(jìn)文本給出。


如何聯(lián)系我們

讀者如發(fā)現(xiàn)本規(guī)范有技術(shù)上的錯誤或者含糊不清的地方境蔼,非常歡迎指出灶平,郵件地址: jls-jvms-spec-comments@openjdk.java.net

如有關(guān)于 javac (Java語言指定的編譯器) 如何生成和操作 class 文件的疑問箍土,可發(fā)郵件至 compiler-dev@openjdk.java.net


譯者注

  • 注1: 因為本文檔是由Markdown編寫的民逼,所以關(guān)于字體格式及其代表的意義可能會有變動,暫時還沒確定涮帘,這里翻譯的是官網(wǎng)的設(shè)置。

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笑诅,一起剝皮案震驚了整個濱河市调缨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吆你,老刑警劉巖弦叶,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妇多,居然都是意外死亡伤哺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門者祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立莉,“玉大人,你說我怎么就攤上這事七问◎殉埽” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵械巡,是天一觀的道長刹淌。 經(jīng)常有香客問我饶氏,道長,這世上最難降的妖魔是什么有勾? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任疹启,我火速辦了婚禮,結(jié)果婚禮上蔼卡,老公的妹妹穿的比我還像新娘喊崖。我一直安慰自己,他們只是感情好菲宴,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布贷祈。 她就那樣靜靜地躺著,像睡著了一般喝峦。 火紅的嫁衣襯著肌膚如雪势誊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天谣蠢,我揣著相機(jī)與錄音粟耻,去河邊找鬼。 笑死眉踱,一個胖子當(dāng)著我的面吹牛挤忙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谈喳,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼册烈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婿禽?” 一聲冷哼從身側(cè)響起赏僧,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扭倾,沒想到半個月后淀零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡膛壹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年驾中,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片模聋。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肩民,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撬槽,到底是詐尸還是另有隱情此改,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布侄柔,位于F島的核電站共啃,受9級特大地震影響占调,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜移剪,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一究珊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纵苛,春花似錦剿涮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怀吻,卻和暖如春瞬浓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓬坡。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工猿棉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屑咳。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓萨赁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兆龙。 傳聞我的和親對象是個殘疾皇子杖爽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354