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

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

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

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

  1. 作为Java程序员都应掌握:java考试题及答案大一

    开头 我们面试的时候 ,经常会被问这种到问题:Spring中bean的循环依赖怎么解决? Spring中bean的加载过程? spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们, ...

  2. Java程序员都是青春饭吗?

    Java程序员都是青春饭吗?过了35岁还能找到工作吗?会不会没人要了?随着IT行业的发展,互联网行业龙头企业中都流传一句话35岁是程序员的一个坎,过去了就没事,过不去就会被裁掉.正因为这句话大家才会认 ...

  3. 每个Java程序员都应该Follow的10个Twitter账号

    想让自己在第一时间了解Java世界正在发生什么吗? Twitter绝对是了解最新动态的优质资源.我列举了每个Java程序员都应该关注的10个twitter账号.在评论中可添加你喜欢的. 1 @java ...

  4. Java程序员都30岁了,还剩下5年“寿命”,这就是所谓的中年危机?

    Java程序员都30岁了,还剩下5年"寿命",这就是所谓的中年危机? 30岁时,我是一个程序员,离传说中的"退休"只有5年了,为了优雅从容的所谓"光荣 ...

  5. 一提到Reference 百分之九十九的java程序员都懵逼了

    原来的标题是:"一提到Reference 99.99%的java程序员都懵逼了",为啥改成汉字了呢?吐槽一下,因为CSDN出bug了,如果你用了%做标题,你的文章就别想用它的编辑器 ...

  6. 新手Java程序员找工作更看重Java项目经验?

    动力节点IT培训,全真项目实操实训,贯穿八大行业,彻底帮助学员摆脱纸上谈兵的尴尬,一技成,天下行. 新手Java程序员找工作更看重Java项目经验?这个问题,想必是很多学Java的朋友也特别好奇的地方 ...

  7. java程序员烂大街了吗?java入坑之前先来看看行情

    java程序员烂大街了吗?下面就跟着小编一起来看看吧! 任何东西的存在.火与不火都是一个供求关系决定的.有需求.有市场.有利益.再加上有合适工具.才会有人去做. 而java却恰恰符合这一点.为什么这么 ...

  8. Java程序员的认证Sun Certified JAVA Programmer(SCJP)

    Java程序员的认证Sun Certified JAVA Programmer(SCJP) 课程:SL-275 JAVA语言编程 本课程使学员掌握如何使用标准JAVA Development Kit, ...

  9. 深受Java程序员欢迎的10款Java IDE

    概述:Java是全世界最受欢迎的一门程序语言,它被广泛的应用于企业项目.游戏设计.安卓应用程序等开发领域.以下的列表是整理的近些年来深受Java程序员欢迎的10款Java IDE. Java是全世界最 ...

最新文章

  1. 联合索引最左匹配原则成因
  2. libtorch Tensor cannot be used as a tuple
  3. Python爬虫基础面试题为2020年初大学生就业做准备(文末附教程)
  4. 从微信红包的春节活动运营方案中,必读的运营策略
  5. 直播 背景 技术体系 乐视云直播Demo
  6. 使用OutputDebugString帮助调试
  7. 银河麒麟通过命令行安装软件没有安装上
  8. vue computed 中操作DOM和给对象添加属性遇到的问题
  9. 【Leetcode】102. 二叉树的层次遍历
  10. WORD小数点对齐?
  11. Unity动画系统详解10:子状态机是什么?
  12. 比特币的服务器作用,比特币白皮书解读-时间戳服务器
  13. 串结构练习--字符串匹配
  14. html 链接 vf,vfp 超链接
  15. Mac下载及安装Tomcat
  16. 【熵系列-3】相对熵(或者 KL散度)
  17. spss软件测试题题库,spss期末考试试题及答案
  18. 163的邮箱如何注册,邮箱申请163的好处
  19. python(2): If/for/函数/try异常/调试/格式输出%
  20. anbox 使用情况_Anbox是什么

热门文章

  1. WindowsPowerShell常用命令
  2. html5--4-3 source元素-解决浏览器的兼容
  3. java 使用webmagic 爬虫框架爬取博客园数据
  4. ACM入门练习与递推小结
  5. RDS最佳实践(三)—如何制定相关的流程来规范RDS的使用
  6. 收藏 | 2015年度大数据应用经典案例Top100
  7. 洛谷1006 传纸条
  8. 一篇故事细细看来,关于人生、关于思想、关于自己(转载)
  9. 基于opencv实现图像差异检测
  10. 【FFMPEG】关于硬解码和软解码