#我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习

Posted 华章计算机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#我与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版)》

以上是关于#我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习的主要内容,如果未能解决你的问题,请参考以下文章

#51CTO学院四周年#我与学院的故事

我们与Kotlin的故事:从尝试到放弃

我与solr--solr后台相关介绍

我与TDengine的故事

毕业一年我与Java的故事

JVM基础知识