好家伙!自己动手写一个JVM?
昨天下午写了一篇短文来聊聊为什么要学习JVM以及如何学习 JVM。
对于 Java 程序员来说,JVM 帮助我们做了很多事情比如内存管理、垃圾回收等等。在 JVM 的帮助下,我们的程序出现内存泄漏这些问题的概率相对来说是比较低的。但是,这并不代表我们在日常开发工作中不会遇到。万一你在工作中遇到了 OOM 问题,你至少要知道如何去排查和解决问题吧!
并且,就单纯从面试角度来说,JVM 是 Java 后端面试(大厂)中非常重要的一环。不论是应届还是社招,面试国内的一些大厂,你都会被问到很多 JVM 相关的问题(应届的话侧重理论,社招实践)。
只有搞懂了 JVM 才有可能真正把 Java 语言“吃透”。学习 JVM 这部分的内容,一定要注意要实战和理论结合。
书籍的话,《深入理解 Java 虚拟机》[1] 这本书是首先要推荐的。
这本书就一句话形容:国产书籍中的战斗机,实实在在的优秀! (真心希望国内能有更多这样的优质书籍出现!加油!💪)
这本书的第三版去年年底已经出来了,新增了很多实在的内容比如 ZGC 等新一代 GC 的原理剖析。目前豆瓣上是 9.6 的高分,🐂 不 🐂 我就不多说了!
不论是你面试还是你想要在 Java 领域学习的更深,你都离不开这本书籍。这本书不光要看,你还要多看几遍,里面都是干货。这本书里面还有一些需要自己实践的东西,我建议你也跟着实践一下。
类似的书籍还有 《实战Java虚拟机》[2]、《虚拟机设计与实现:以JVM为例》[3] ,这两本都是非常不错的!
如果你对实战比较感兴趣,想要自己动手写一个简易的 JVM 的话,可以看看 《自己动手写Java虚拟机》[4] 这本书。
书中的代码是基于 Go 语言实现的,搞懂了原理之后,你可以使用 Java 语言模仿着写一个,也算是练练手!如果你当前没有能力独立使用 Java 语言模仿着写一个的话,你也可以在网上找到很多基于 Java 语言版本的实现,比如《zachaxy的手写JVM系列》[5] 。
这本书目前在豆瓣有8.2的评分,我个人觉得张秀宏老师写的挺好的,这本书值得更高的评分。
另外,R大在豆瓣发的《从表到里学习JVM实现》[6]这篇文章中也推荐了很多不错的 JVM 相关的书籍,推荐小伙伴们去看看。
再推荐两个视频给喜欢看视频学习的小伙伴。
第 1 个是尚硅谷的宋红康老师讲的《JVM全套教程》[7]。这个课程的内容非常硬,一共有接近400小节。
课程的内容分为3部分:
《内存与垃圾回收篇》 《字节码与类的加载篇》 《性能监控与调优篇》
第 2 个是你假笨大佬的 《JVM 参数【Memory 篇】》[8] 教程,很厉害了!
下面是我总结的一些关于 JVM 的小问题,你可以拿来自测:
什么是虚拟机? Java 内存区域是怎么划分的?大对象放在哪个内存区域? 垃圾回收有哪些算法?GC 的流程 什么是类加载?何时类加载?类加载流程? 知道哪些类加载器。类加载器之间的关系? 类加载器的双亲委派了解么?结合 Tomcat 说一下双亲委派(Tomcat 如何打破双亲委托机制?...)。 常见调优参数有哪些?
参考资料
《深入理解 Java 虚拟机》: https://book.douban.com/subject/34907497/
[2]《实战Java虚拟机》: https://book.douban.com/subject/26354292/
[3]《虚拟机设计与实现:以JVM为例》: https://book.douban.com/subject/34935105/
[4]《自己动手写Java虚拟机》: https://book.douban.com/subject/26802084/
[5]《zachaxy的手写JVM系列》: https://zachaxy.github.io/tags/JVM/
[6]《从表到里学习JVM实现》: https://www.douban.com/doulist/2545443/
[7]《JVM全套教程》: https://www.bilibili.com/video/BV1PJ411n7xZ
[8]《JVM 参数【Memory 篇】》: https://club.perfma.com/course/438755/list
欢迎加入我的星球,一个纯 Java 面试交流圈子 !Ready!。目前星球已经更新 3 个原创小册:《Java面试进阶指北》、《从零开始写一个 RPC 框架》 、《程序员副业赚钱之路》。累计帮助 520+ 位球友提供了免费的简历修改服务,回答了 500+ 个问题,产出了 1300+ 个主题。
推荐👍 :1049天,100K!简单复盘!
推荐👍 :Github掘金计划:Github上的一些优质项目搜罗