好家伙!自己动手写一个JVM?

JavaGuide

共 2284字,需浏览 5分钟

 · 2021-04-10

昨天下午写了一篇短文来聊聊为什么要学习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部分:

  1. 《内存与垃圾回收篇》
  2. 《字节码与类的加载篇》
  3. 《性能监控与调优篇》

第 2 个是你假笨大佬的 《JVM 参数【Memory 篇】》[8] 教程,很厉害了!

下面是我总结的一些关于 JVM 的小问题,你可以拿来自测:

  1. 什么是虚拟机?
  2. Java 内存区域是怎么划分的?大对象放在哪个内存区域?
  3. 垃圾回收有哪些算法?GC 的流程
  4. 什么是类加载?何时类加载?类加载流程?
  5. 知道哪些类加载器。类加载器之间的关系?
  6. 类加载器的双亲委派了解么?结合 Tomcat 说一下双亲委派(Tomcat 如何打破双亲委托机制?...)。
  7. 常见调优参数有哪些?

参考资料

[1]

《深入理解 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上的一些优质项目搜罗

我是 Guide哥,拥抱开源,喜欢烹饪。Github 接近 10w 点赞的开源项目 JavaGuide 的作者。未来几年,希望持续完善 JavaGuide,争取能够帮助更多学习 Java 的小伙伴!共勉!凎!点击查看我的2020年工作汇报!
原创不易,欢迎点赞分享。咱们下期再会!
浏览 56
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报