我們花了幾天的時間來閱讀《Java虛擬機規范》,了解要實現一個虛擬機應該包括什么內容。通過這么一次閱讀,我們大致了解了虛擬機規范的內容。
- 第1章。對Java虛擬機進行了一些簡單的介紹。
- 第2章。介紹了虛擬機的結構,以及一些異常體系以及字節碼指令集。可以說是規范的重點內容。
- 第3章。介紹了編譯器是如何將Java源代碼編譯成JVM所需要的字節碼的,如何去閱讀這些字節碼指令。
- 第4章。這一章針對字節碼文件的格式做了詳細的講解,讓我們了解字節碼里的每一個字節的作用。
- 第5章。這一章對JVM是如何啟動、加載以及初始化字節碼做了詳細的描述。
- 第6章。這一章節介紹了虛擬機指令集的相關知識,對虛擬機指令集的每個指令做了詳細的介紹,可以當成工具書來查詢使用。
通過這么一個介紹,我們可以知道第2、3、4、5章節是重點。這些章節中的Java虛擬機結構、字節碼文件格式、JVM加載過程是重點,讀完之后至少要弄懂這些過程。
讀完這份規范,也有許多不懂的地方,例如:
- 第3章中,將Java代碼編譯成字節碼指令集,幾乎每一章節都有對應的Java代碼和字節碼的對照。這需要我們耐心地一個個指令去查詢和理解,這部分我在閱讀的時候也是簡單略過。這是后期的學習重點。
- 本文其他部分也有不少關乎數學的嚴謹描述,這部分我也只是粗略掃過。這也是后期進一步學習需要加強的。
簡單地說,通過閱讀《Java虛擬機規范》,我從官方渠道驗證了之前的一些猜想。例如:
- JVM 就是一個虛擬機的機器,與正常的PC一樣,其有內存也有指令集。
- 准備階段,虛擬機不執行任何字節碼指令,而知識為類或接口的靜態字段分配空間,並用默認值初始化這些字段。
- boolean類型在JVM中的實現,是通過int類型來實現的。在JVM中,是沒有boolean類型這一數據類型的。
- 等等
很多時候我們會被網絡上許多知識點的解釋迷惑,不知道哪個說的是正確的。這個時候就需要我們去找到官方的消息渠道。而對於虛擬機來說,《Java虛擬機規范》就是這樣一個官方的消息,在規范中所說的就是絕對正確的消息來源。所以說閱讀《Java虛擬機規范》才顯得尤為重要。
通過這一次閱讀,我驗證了不少之前留存下來的疑惑,也新增了不少新的疑惑。但我相信這一次閱讀將會給我帶來很大的積極影響,下次當我遇到虛擬機模棱兩可的問題時,我會優先查找規范中的解釋,之后再去參考其他的。這可以說是一種更為有效的學習方式。
如果你還沒有閱讀過,那么你可以跟着這個系列,與我一起閱讀。也與我一樣,在閱讀中寫下自己的想法。隨着更多人能讀完這本規范,我相信也有更多不同的想法蹦出,通過彼此交流,我們定能夠理解得更加深刻。