1.說在前面
在Java相關崗位的春/秋招面試過程中,JVM的學習是必不可少的。本文主要是通過《深入理解Java虛擬機》第三版來介紹JVM的學習路線和方法,并對沒有過JVM基礎的給出閱讀和學習建議,盡可能更加快速高效的進行JVM的學習與秋招面試的備戰。
2.JVM是什么
在介紹JVM的學習備戰路線和方法之前,先對JVM是什么做一個介紹,通過JVM是什么來理解為什么要學習JVM。
JVM即Java Virtual Machine,Java虛擬機,簡單來說就是一臺虛擬的計算機,平時編寫的Java代碼就需要借助JVM來運行。
詳細點說,JVM內部實現了內存管理,例如JVM能夠給我們Java代碼中的對象進行內存分配、當對象沒用的時候進行垃圾回收。而內存是我們操作系統的東西,所以JVM就相當于一個中間調度者,我們的Java代碼編譯生成字節碼,字節碼交給JVM,JVM調用操作系統的東西來實現代碼的運行。過程如下圖所示
通過上圖不難得出Java“編譯一次,到處運行”的原因,我們的Java代碼都是 .java文件,通過編譯生成 .class文件,然后class文件交給JVM,其他的執行細節都由JVM來完成,所以只要不同的操作系統上都安裝了JVM就能夠實現“編譯一次,到處運行”。
到這里,大概已經明白了JVM是什么,JVM能夠干什么,當然JVM的重要性也不言而喻,所以接下來介紹JVM的學習路線。
3.JVM學習指南
如果是準備面試的話,JVM的學習一共需要兩個階段,第一階段主要通過看書來掌握JVM的理論基礎和內涵,第二個階段則是系統的看八股文(面試題)來達到一個復習和應對面試的效果
下圖展示了《深入理解Java虛擬機》一書的目錄,我把書的目錄按照面試中出現的頻率進行了劃分。
選讀: 選讀部分主要是JVM實踐和調優的部分,如果當前面試時間比較緊迫就可以跳過這一個部分。但有時間的話還是推薦閱讀這一部分,JVM調優相對其它章節難度較大,但在校招的面試中是絕對的加分項
了解: 了解的部分是書中第六章,類文件結構,這部分主要介紹了Class文件的結構,這部分需要有一定的了解
掌握: 掌握部分是第八章的字節碼執行引擎以及十二、十三章的并發部分。第八章的字節碼分析,是比JVM調優稍微簡單點的面試加分項,書中的分析也十分到位,作者幾乎已經把知識給你嚼碎了,只差你自己送到胃里,所以把整個部分歸納為了掌握。至于十二和十三章,如果對Java并發編程有過學習推薦仔細閱讀,會有不一樣的收獲。但如果備戰學習的過程中還沒有進行并發編程的學習,那么這兩章可以先放一放,暫時不看,在Java并發編程的學習體系中更系統的去學習會更好。
熟悉: 第二章和第三章歸納為了熟悉,第二章是JVM學習的理論基礎所以這一章必須深入理解并記憶。第三章垃圾回收則是面試的大熱門,并且學習的成本相對上面的JVM調優和字節碼指令要低,垃圾回收的知識體系結構劃分的很清晰,所以學習難度相對不大。
(書中還有一個第一章,第一章講講Java發展史,然后教你裝了個JDK,但我們所有人電腦上都已經有JDK了,所以第一章可看可不看吧,看了拓寬一下視野)
看完書之后就可以看面試題了,這里推薦庫森和Guide的網站,網站上歸納了很完善的面試題。
庫森:https://www.javalearn.cn/#/doc/JVM/面試題
Guide:https://javaguide.cn/java/jvm/memory-area.html#前言