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

JavaGuide

共 2284字,需浏览 5分钟

 ·

2021-04-10 11:38

昨天下午写了一篇短文来聊聊为什么要学习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年工作汇报!
原创不易,欢迎点赞分享。咱们下期再会!
浏览 79
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报