java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?
博主個人獨立站點開通啦!歡迎點擊訪問:https://shuyi.tech
許多人知道類加載機制、JVM內(nèi)存模型,但他們可能不知道什么是《Java虛擬機規(guī)范》。對于Java開發(fā)來說,《Java虛擬機規(guī)范》才是最為官方、準確的一個文檔,了解這個規(guī)范可以讓我們更深入地理解JVM。我們平常說的JVM其實更多說的是HotSpot(HotSpot是JVM規(guī)范的一種實現(xiàn)),但我們常常將HotSpot與JVM等同起來。正因?qū)τ贘VM規(guī)范認識的不足,所以我專門準備一個系列的文章,帶著大家讀一讀JVM規(guī)范。
在接下來的一系列文章中,我將帶著大家一個章節(jié)一個章節(jié)解讀《Java虛擬機規(guī)范》。但也因為個人實力原因,無法做好詳盡的講解。所以本系列文章的寫作風格是導讀。導讀的意思是我?guī)е阋黄鹱x,遇到一段話,我寫下自己的一些想法,與大家分享。導讀的缺點就是不成體系,跟著章節(jié)走,所以讀這個系列的文章不會有深入淺出的感覺。這點大家需要做好心理準備,以免失望。
有時候難免會有紕漏,請大家見諒。也歡迎有興趣的朋友一起勘誤,一起提出不同見解,共同推進JVM學習氛圍。
緒論
打開《Java虛擬機規(guī)范》目錄,我們可以看到規(guī)范分為下面幾個部分:
第1章 引言
第2章 Java虛擬機結(jié)構
第3章 為Java虛擬機編譯
第4章 Class文件格式
第5章 加載、鏈接與初始化
第6章 Java虛擬機指令集
第7章 操作碼助記符
第1章 引言
從第1章的目錄可以看出,其主要介紹一些歷史以及Java虛擬機的基礎知識,還有各章節(jié)提要,沒有什么難度。略過。
第2章 Java虛擬機結(jié)構
第2章介紹了Class文件格式、數(shù)據(jù)類型、原始類型、引用類型、運行時數(shù)據(jù)區(qū)、棧幀、字節(jié)碼指令等。
在這一部分中,我們比較熟悉的就是運行時數(shù)據(jù)區(qū)了。其實我們習慣性叫Java虛擬機內(nèi)存模型或內(nèi)存結(jié)構,但在JVM規(guī)范中是叫做運行時數(shù)據(jù)區(qū)的。此外棧幀也是非常重要的一個部分,與方法的調(diào)用有關。字節(jié)碼指令則是更加深層次的知識。
此外,數(shù)據(jù)類型、原始類型、引用類型等也是基礎的知識,但用得相對較少。
第3章 為Java虛擬機編譯
這一章從名字可以看出,寫的是如何編譯Java文件的,將Java文件編譯為字節(jié)碼文件,最終提供給Java虛擬機使用。
我們之前提到Java虛擬機其實就是將字節(jié)碼文件翻譯成機器碼,所以這里就是編譯器把Java源碼編譯成字節(jié)碼。但是到底如何編譯呢?
算數(shù)運算要怎么編譯?
常量池如何編譯?
方法調(diào)用如何編譯?
……
這一章解決的就是這個問題。
第4章 Class文件格式
前面提到過JVM的輸入物料是字節(jié)碼文件,也就是Class文件,而不是Java文件。也就是說無論是Java語言,還是php語言,只要你能編譯出字節(jié)碼文件,那JVM就能夠運行。
那么我們就知道這個Class文件必定是有統(tǒng)一格式的。而這一章節(jié)說的內(nèi)容就是Class文件的格式構成。之前我們寫過一個HelloWorld.java文件,將其編譯成字節(jié)碼文件,然后一個字節(jié)一個字節(jié)地分析其內(nèi)容。要能分析字節(jié)碼文件的內(nèi)容,首先就得弄清楚Class文件的格式。而這一章就是講解字節(jié)碼文件格式的。
這一章節(jié)也是非常重要的。
第5章 加載、鏈接與初始化
Java虛擬機規(guī)范其實是遞進、非常有節(jié)奏的。前面第2章講了JVM的內(nèi)存結(jié)構,之后將如何將源文件(.java)編譯成字節(jié)碼文件(.class)文件,之后將了字節(jié)碼文件的格式。那么下一步是什么?
下一步就是把字節(jié)碼文件加載到內(nèi)存中運行呀!
沒錯,第5章說的就是這個內(nèi)容。
首先是加載。《Java虛擬機規(guī)范》在這一章中說明了Java虛擬機將如何啟動、如何創(chuàng)建、加載類。
其次是鏈接(包括驗證、準備、解析)。首先會驗證,字節(jié)碼文件加載進來了,那么就必須要驗證下這個字節(jié)碼文件是否寫對了,不然隨便寫一個文件就運行,豈不是亂套了。準備是給變量和對象分配內(nèi)存。校驗完數(shù)據(jù)格式,那么就要針對字節(jié)碼內(nèi)容進行解析了,就是讀懂這些字節(jié)碼數(shù)據(jù)到底要干嘛。這個過程包括了:類與接口解析、字段解析、普通方法解析等等。
之后是初始化。會運行一些初始化的構造方法,用于初始化數(shù)據(jù)。
最后運行完畢,Java虛擬機退出。
第6章 Java虛擬機指令集
指令集,其實就是一系列指令的集合。例如我們需要給一個局部變量賦予1這個值,即這個動作:int a = 1; 在我們看來,這很簡單,但對于機器來說需要很多個動作。
所以Java虛擬機指令集就是將這些常用的動作集中起來,定義成一系列指令,方便我么能使用。
總結(jié)
《Java虛擬機規(guī)范》是最官方的標桿,弄懂它之后,你不會再為網(wǎng)上亂七八糟的資料煩惱,因為這里就是最標準的。但對于初學者來說,看JVM規(guī)范實在是枯燥難懂。所以如果你是初學者,看了這個系列的文章覺得很難懂,也不要氣餒,因為著很正常。作者也是經(jīng)過了三四年的不斷理解和修正,才慢慢弄懂這些東西。
有時候?qū)戇@個系列,我也經(jīng)常質(zhì)問自己:你自己水平還不夠,如果寫出一些不準確的東西,豈不是誤人子弟。這個想法在我心中存在了許久,總是覺得要到達很高的水平才可以做這么一件事情。但后來我想:做一件事情,更重要的是你有多想去做,你希望創(chuàng)造價值的信念有多強,而不是你有多強。有些人很強,但他們卻不分享了。而有些人,即使他們理解不是那么深刻,但他們樂于分享,卻幫助了不少的人。
對于學習者的你們也是如此。學習JVM不是你需要對它的認識和理解有多深,而是你有多想學。來吧,和我一起一起進入JVM的海洋,一起學習吧!
JVM規(guī)范系列文章目錄
如果你還沒下載《Java虛擬機規(guī)范》這本書,那么先點擊這里下載再一塊兒看吧。
總結(jié)
以上是生活随笔為你收集整理的java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java pdf水印排布问题_Java实
- 下一篇: java 命令 乱码_解决java 命令