好家伙!自己動(dòng)手寫一個(gè)JVM?
昨天下午寫了一篇短文來聊聊為什么要學(xué)習(xí)JVM以及如何學(xué)習(xí) JVM。
對于 Java 程序員來說,JVM 幫助我們做了很多事情比如內(nèi)存管理、垃圾回收等等。在 JVM 的幫助下,我們的程序出現(xiàn)內(nèi)存泄漏這些問題的概率相對來說是比較低的。但是,這并不代表我們在日常開發(fā)工作中不會(huì)遇到。萬一你在工作中遇到了 OOM 問題,你至少要知道如何去排查和解決問題吧!
并且,就單純從面試角度來說,JVM 是 Java 后端面試(大廠)中非常重要的一環(huán)。不論是應(yīng)屆還是社招,面試國內(nèi)的一些大廠,你都會(huì)被問到很多 JVM 相關(guān)的問題(應(yīng)屆的話側(cè)重理論,社招實(shí)踐)。
只有搞懂了 JVM 才有可能真正把 Java 語言“吃透”。學(xué)習(xí) JVM 這部分的內(nèi)容,一定要注意要實(shí)戰(zhàn)和理論結(jié)合。
書籍的話,《深入理解 Java 虛擬機(jī)》[1] 這本書是首先要推薦的。

這本書就一句話形容:國產(chǎn)書籍中的戰(zhàn)斗機(jī),實(shí)實(shí)在在的優(yōu)秀! (真心希望國內(nèi)能有更多這樣的優(yōu)質(zhì)書籍出現(xiàn)!加油!??)
這本書的第三版去年年底已經(jīng)出來了,新增了很多實(shí)在的內(nèi)容比如 ZGC 等新一代 GC 的原理剖析。目前豆瓣上是 9.6 的高分,?? 不 ?? 我就不多說了!
不論是你面試還是你想要在 Java 領(lǐng)域?qū)W習(xí)的更深,你都離不開這本書籍。這本書不光要看,你還要多看幾遍,里面都是干貨。這本書里面還有一些需要自己實(shí)踐的東西,我建議你也跟著實(shí)踐一下。
類似的書籍還有 《實(shí)戰(zhàn)Java虛擬機(jī)》[2]、《虛擬機(jī)設(shè)計(jì)與實(shí)現(xiàn):以JVM為例》[3] ,這兩本都是非常不錯(cuò)的!

如果你對實(shí)戰(zhàn)比較感興趣,想要自己動(dòng)手寫一個(gè)簡易的 JVM 的話,可以看看 《自己動(dòng)手寫Java虛擬機(jī)》[4] 這本書。

書中的代碼是基于 Go 語言實(shí)現(xiàn)的,搞懂了原理之后,你可以使用 Java 語言模仿著寫一個(gè),也算是練練手!如果你當(dāng)前沒有能力獨(dú)立使用 Java 語言模仿著寫一個(gè)的話,你也可以在網(wǎng)上找到很多基于 Java 語言版本的實(shí)現(xiàn),比如《zachaxy的手寫JVM系列》[5] 。
這本書目前在豆瓣有8.2的評分,我個(gè)人覺得張秀宏老師寫的挺好的,這本書值得更高的評分。
另外,R大在豆瓣發(fā)的《從表到里學(xué)習(xí)JVM實(shí)現(xiàn)》[6]這篇文章中也推薦了很多不錯(cuò)的 JVM 相關(guān)的書籍,推薦小伙伴們?nèi)タ纯础?/p>
再推薦兩個(gè)視頻給喜歡看視頻學(xué)習(xí)的小伙伴。
第 1 個(gè)是尚硅谷的宋紅康老師講的《JVM全套教程》[7]。這個(gè)課程的內(nèi)容非常硬,一共有接近400小節(jié)。
課程的內(nèi)容分為3部分:
《內(nèi)存與垃圾回收篇》 《字節(jié)碼與類的加載篇》 《性能監(jiān)控與調(diào)優(yōu)篇》

第 2 個(gè)是你假笨大佬的 《JVM 參數(shù)【Memory 篇】》[8] 教程,很厲害了!

下面是我總結(jié)的一些關(guān)于 JVM 的小問題,你可以拿來自測:
什么是虛擬機(jī)? Java 內(nèi)存區(qū)域是怎么劃分的?大對象放在哪個(gè)內(nèi)存區(qū)域? 垃圾回收有哪些算法?GC 的流程 什么是類加載?何時(shí)類加載?類加載流程? 知道哪些類加載器。類加載器之間的關(guān)系? 類加載器的雙親委派了解么?結(jié)合 Tomcat 說一下雙親委派(Tomcat 如何打破雙親委托機(jī)制?...)。 常見調(diào)優(yōu)參數(shù)有哪些?
參考資料
《深入理解 Java 虛擬機(jī)》: https://book.douban.com/subject/34907497/
[2]《實(shí)戰(zhàn)Java虛擬機(jī)》: https://book.douban.com/subject/26354292/
[3]《虛擬機(jī)設(shè)計(jì)與實(shí)現(xiàn):以JVM為例》: https://book.douban.com/subject/34935105/
[4]《自己動(dòng)手寫Java虛擬機(jī)》: https://book.douban.com/subject/26802084/
[5]《zachaxy的手寫JVM系列》: https://zachaxy.github.io/tags/JVM/
[6]《從表到里學(xué)習(xí)JVM實(shí)現(xiàn)》: https://www.douban.com/doulist/2545443/
[7]《JVM全套教程》: https://www.bilibili.com/video/BV1PJ411n7xZ
[8]《JVM 參數(shù)【Memory 篇】》: https://club.perfma.com/course/438755/list
歡迎加入我的星球,一個(gè)純 Java 面試交流圈子 !Ready!。目前星球已經(jīng)更新 3 個(gè)原創(chuàng)小冊:《Java面試進(jìn)階指北》、《從零開始寫一個(gè) RPC 框架》 、《程序員副業(yè)賺錢之路》。累計(jì)幫助 520+ 位球友提供了免費(fèi)的簡歷修改服務(wù),回答了 500+ 個(gè)問題,產(chǎn)出了 1300+ 個(gè)主題。
推薦?? :1049天,100K!簡單復(fù)盤!
推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅
