#我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
Java作为最成熟的工业级编程语言,其从业人员也是世界上最多的。刚从学校毕业时候,对于编程世界一知半解的我,也随着大流懵懵懂懂地成为了一名Java初级工程师。
得益于多年的改进与发展,Java底层封装的相当之好,“一次编译,处处运行”的特点,也屏蔽了底层操作系统的差异,对于刚入门的学习者相当友好,使用者免于纠缠在大量繁杂的细节,专心于上层逻辑,因此也会给初学者一种“学习Java很容易”的错觉。然而这是不可能的,代码界前辈有云:“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决----抽象过多这个问题除外。”虽然Java通过引入了Java虚拟机,解决了C++中令无数开发者头痛的内存控制问题,但是不可避免的,JVM本身也成为了Java开发者工作中进一步攀升需要克服的一座大山。
对于我来说,经过了“make it run”甜蜜的初级阶段之后,很快遇到了一系列令人头疼的问题:为什么这个Java程序耗费的内存如此之多?程序中报出的“OutOfMemoryError”错误是什么意思?为什么技术老大说这个程序延迟过大是因为gc频繁的原因......一连串的疑问迎面而来,让我意识到我在之前的学习中忽略了一些东西,通过在网上搜索和请教他人,我知道了这些都和Java虚拟机有关,那么应该怎么学习JVM呢?网上大部分人都对周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》交口称赞,推荐初学者通过这本书入门。怀着将信将疑的心情,我马上入手了一部周志明老师的书,开始了对JVM的学习。
第一次对JVM的学习,是通过第二版的“小蓝”,开篇对于Java世界的技术体系进行了介绍,并对Java虚拟机一路走来的历史娓娓道来,让我觉得兴趣盎然。接着介绍了对JVM内存区域的划分,以及至今为止有哪几种垃圾收集策略,并以Hotspot JVM为例,阐明了各种收集策略对应的垃圾收集器。还对如何解读GC日志进行了分析,这些都让我受益匪浅。然而我高兴地太早了,在我觉得自己已经大有长进的时候,看到了虚拟机执行子系统这一章节,JVM复杂的类文件结构以及各种繁杂的字节码指令,让我学的昏昏欲睡,痛苦的坚持了一段时间之后,我放弃了对JVM的进一步学习。
一段时间之后,我在工作中需要用到Java并发编程的一些技术,而这又和Java的内存模型,线程安全以及锁等知识密不可分。我回忆起《深入理解Java虚拟机》书中后面章节正是对这些知识的介绍,于是重拾起对JVM的学习,钻研理解了happens-before原则,Java线程状态与调度等等,这些使得我大大增强了Java并发编程的技巧。
回顾过往短短几年编程经历,周志明老师的书发挥了不可或缺的作用,最近听说周老师又出版了第三版的《深入理解Java虚拟机》,其中增加了JDK 12和预览版JDK 13的相关知识,准备继续研读一遍,相信对最新的java技术能够有所裨益。
推荐阅读
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
推荐语:这是一部从工作原理和工程实践两个维度深入剖析JVM的著作, 自2011年上市以来,前两个版本累计印刷36次,销量超过30万册,大厂面试最佳参考手册,进阶架构师必读、Java优化神书,这些标签成就了它成为原创计算机图书领域不可逾越的丰碑。
第3版在第2版的基础上做了重大修订,内容更丰富、实战性更强:根据新版JDK对内容进行了全方位的修订和升级,围绕新技术和生产实践新增逾10万字,包含近50%的全新内容,并对第2版中含糊、瑕疵和错误内容进行了修正。
你与世界
只差一个