无责任书评:每个Java程序员都应该深入理解Java虚拟机!

2019 年 3 月 14 日 码农翻身

Java这门语言的发展是很有意思的,它不像Python, Ruby 等完全是开源社区驱动,也不像C#,VB.NET主要由微软操刀。它是一个以Oracle(之前是Sun)为主,各大巨头一起参与,一起制定标准的一门语言。


想对Java添加一点特性, 得走JCP流程,巨头们要审查,看看对自己是否有利,然后投票决定。


在Java的生态中,  官方曾经制定了很多技术和标准,什么Applet, JSP, EJB,JSF, JavaFX......  但是大部分都被淘汰了,原因很简单,这些标准制定的周期很长, 难以跟上软件行业迅速的变化,等到各大厂商再把实现给搞定,黄花菜都凉了。 所以大家最常用的反而是开源的框架和工具如Spring。


但是Java 语言本身和Java虚拟机是个例外,因为他们不需要也不可能像应用层那样剧烈变化,所以作为后端程序员,对他们进行“投资”是最划算的


所以我们今天就来聊聊Java虚拟机的书籍。写这方面的书很多, 比如我最早看的就是这一本。


我个人认为这是相当不错的一本书,它在讲ClassLoader 的时候举了一个例子,如果没有双亲委托模型,不怀好意的那些java class 很容易会破坏你的系统,这个例子让我印象如此深刻,以至于我在写《我是一个Java Class》的时候,也编了一个类似的例子。


这本书还花了大量的篇幅讲解Java Class的文件格式,整数运算,浮点数运算,数组和数组,异常,方法调用等各种实现细节。


相比而言,周志明的那本书就讲得比较少。


更好玩的是,这本书还附带了一个小程序,能够可视化地、一步步地执行字节码。如果你要想自己写个Java虚拟机,可以关注这本书。 



这本书美中不足的就是年代比较久远,另外翻译得不太好。


然后我们就要说说周志明的这本神书了 《深入理解Java虚拟机》, 是很多Java程序员的案头必备。


第一版是2011年出版, 然后每次京东和当当搞活动,我发现这本书总是站在前排,足以说明其经典地位。嗯,希望我的书《码农翻身》也能有这样的效果。


这本书体现了周志明的深厚功力,把JVM的很多知识讲得深入浅出,有很多也是面试之必备。例如Java虚拟机的运行时数据区域,对象的内存布局,垃圾回收算法,性能调优,代码优化,Java内存模型等等。 


其中的很多内容被博客文章大量抄袭,与其在网上搜了搜去看二手货,还不如直接看书。


在讲理论之外,还举了很多实践中的案例,我印象最深刻的就是那个自己动手实现远程执行功能。


如果说有瑕疵的话,我觉得在讲锁优化,轻量级锁,偏向锁,重量级锁的时候不清楚,让人看起来云里雾里。 不妨先看看我的文章《我也是一个线程,为什么不让我阻塞休息呢?


但是,我必须要说的是:如果刚刚学会Java, 会用Java 框架开发项目,立刻就来看这本书,就需要小心了。 


第一章、第二章估计还不错,到了第三章“垃圾回收器和内存分配”就会开始犯晕, 坚持到第四章“性能监控和故障处理” 和第五章“调优案例分析和实战”, 估计就看不行去了, 因为比较枯燥,再加上缺乏经验,在工作中实际应用得比较少。


这时候可以跳过他们, 直接去看第六、七、八、九章,看看类的文件结构,加载机制,执行引擎 ,都是很有意思的内容。


至于第十章,第十一章,也是比较枯燥,和实战结合不紧密的部分,也可以跳过,事后慢慢再看。


第十二章,第十三章讲Java内存模式、线程安全、锁,要重点看一下。


总之,这本书可以放到案头,遇到问题时不时地翻一下,总是会有收获。


不知道你看完了Java虚拟机的书籍以后有没有这样的念头:自己动手也来写一个!


其实很多人已经动手做了,并且用了不同的语言来实现,比如《自己动手写java 虚拟机》一书中用Go语言做了实现。 


GitHub上有人用C语言实现: 

https://github.com/ozy/ToyJVM/


还有用Python实现的: 

https://github.com/gkbrk/python-jvm-interpreter


我在编程提高群第一季中还带着大家用Java做了一个实现。 


但是不得不说,这些实现都不是完整的虚拟机,至少都没有实现垃圾回收功能,但是通过写一个简单的虚拟机,你会更加深入地理解Class 文件的字节码,理解JVM运行时的结构,理解函数调用如何实现,多态如何实现。 


经常抱怨增删改查没技术含量的同学可以尝试下,写个虚拟机需要驾驭多个类的设计,这是一个不小的工程,很有价值。


你可能会 喜欢

关于老刘和码农翻身

为什么《深入理解计算机系统》是一本神书?

我是一个线程

我是一个Java Class

面向对象圣经

TCP/IP之大明邮差

CPU阿甘

负载均衡的原理

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

C语言:春节回家,我发现只有我没有对象

登录查看更多
0

相关内容

【实用书】Python技术手册,第三版767页pdf
专知会员服务
236+阅读 · 2020年5月21日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
143+阅读 · 2020年5月19日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
59+阅读 · 2020年4月26日
机器学习速查手册,135页pdf
专知会员服务
342+阅读 · 2020年3月15日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
214+阅读 · 2020年2月21日
你必须知道的六个深度炼丹好习惯
GAN生成式对抗网络
9+阅读 · 2019年5月16日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
【机器学习】深入剖析机器学习中的统计思想
产业智能官
16+阅读 · 2019年1月24日
各编程领域最好的入门书籍
程序猿
28+阅读 · 2018年7月29日
七本书籍带你打下机器学习和数据科学的数学基础
程序员进阶指南:如何提升自身的不可替代性
开源中国
4+阅读 · 2018年1月8日
牛逼的数据科学家应该具有的8个习惯!
物联网智库
5+阅读 · 2017年12月3日
[深度学习] 我理解的循环神经网络RNN
机器学习和数学
16+阅读 · 2017年12月2日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
Arxiv
8+阅读 · 2018年11月21日
Arxiv
6+阅读 · 2018年4月23日
Arxiv
11+阅读 · 2018年3月23日
Arxiv
27+阅读 · 2017年12月6日
VIP会员
相关VIP内容
【实用书】Python技术手册,第三版767页pdf
专知会员服务
236+阅读 · 2020年5月21日
【实用书】Python数据科学从零开始,330页pdf
专知会员服务
143+阅读 · 2020年5月19日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
59+阅读 · 2020年4月26日
机器学习速查手册,135页pdf
专知会员服务
342+阅读 · 2020年3月15日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
214+阅读 · 2020年2月21日
相关资讯
你必须知道的六个深度炼丹好习惯
GAN生成式对抗网络
9+阅读 · 2019年5月16日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
【机器学习】深入剖析机器学习中的统计思想
产业智能官
16+阅读 · 2019年1月24日
各编程领域最好的入门书籍
程序猿
28+阅读 · 2018年7月29日
七本书籍带你打下机器学习和数据科学的数学基础
程序员进阶指南:如何提升自身的不可替代性
开源中国
4+阅读 · 2018年1月8日
牛逼的数据科学家应该具有的8个习惯!
物联网智库
5+阅读 · 2017年12月3日
[深度学习] 我理解的循环神经网络RNN
机器学习和数学
16+阅读 · 2017年12月2日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
Top
微信扫码咨询专知VIP会员