[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱?
曾经的我经常害怕处理与JVM相关的异常,对JVM的配置参数也一无所知,那时候我天真地认为,JVM的出现本身就是想让程序员屏蔽实现细节,作为一名普通的开发,我们完全没有必要了解内在构造,只要记住一些简单的规则足矣。 随着工作的深入,我开始接触到JVM的实现原理,驾轻就熟之后,我发现自己看到了一片更为广阔的天地。简而言之,当我再遇到问题时,我也能够更加快速和系统地思考问题的性质,并快速做出判断。同时,学习新的编程语言时,我也可以从“同理心”的角度思考为什么作者要这样设计,他的用意何在。基于这些思考和分析,我也能够快速看到事情的本质,跑得更快,走得更远。 所以,作为一名Java程序员,在尽情享受Java虚拟机带来好处的同时,你还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉JVM,你才能在遇到OutOfMemory等异常时,不会束手无策,不会一脸懵逼的上网找解决办法,最后就算改了几个启动参数解决了问题,也还是云里雾里。 “为什么学Java虚拟机”这个问题,就和“为什么要学习数据结构和算法”是一个道理:工欲善其事,必先利其器。可以说,Java虚拟机就是每一位Java工程师进阶加薪的利器,你想往上升,你想深入技术,不想一直停留在简单开发,或者你在做Java性能分析、调优工作时,那么,Java虚拟机绝对是一把助力的利剑。 但,在我7年的学习工作生涯中,我拜读过许多大神关于Java虚拟机的技术博客,在受益匪浅的同时,我发觉不少文章的门槛都比较高,而且过分注重实现细节,这并不是大多数的开发人员可以受益的调优方案。这么一来,许多原本对Java虚拟机感兴趣的同学, 也因为过高的门槛,以及短时间内看不到的收益,而放弃了对Java虚拟机的学习。 这是我非常不想看到的。在收到极客时间的邀请后,我决定挑战一下Java虚拟机的科普工作,于是有了这个专栏:《深入拆解Java虚拟机》。在这个专栏里,我会用简单通俗的语言,来介绍Java虚拟机的实现。具体到每篇文章,我将采用一个贯穿全文的案例来阐述知识点,并且给出相应的分析建议。在文章的末尾,我还将附上一个动手实践的环节,帮助你巩固对知识点的理解。 我是谁? 我是郑雨迪,是甲骨文实验室(Oracle Labs)的高级研究员,主要负责研究如何通过程序分析技术以及动态编译技术让程序语言跑得更快。我是全栈虚拟机Graal编译器的核心开发者之一,也在为HotSpot虚拟机项目添砖加瓦。 这里顺便说明一下,Graal编译器是Java 10正式引入的实验性即时编译器,在国内同行口中被称为“甲骨文黑科技”。其实,我们的工作同样也是分析应用程序的性能瓶颈,寻找优化空间,只不过我们的优化方式对自动化、通用性有更高的要求。因此,我来讲Java虚拟机,可以为你提供一些深入的、独特的视角,让你更能洞察Java虚拟机的核心。 加入甲骨文之前,我在瑞士卢加诺大学攻读博士学位,研究如何更加精准地监控Java程序,以便做出更具针对性的优化。比如,我研究过JVM监控工具的“observer effect”,并提出一套针对动态编译的解决方案。苏菲的世界读书笔记(http://www.simayi.net/dushubiji/6415.html)摘抄好词好句好段及感悟赏析,这些研究工作均已发表在程序语言方向的顶级会议上,并获得了不少同行的认可。 我的整个专栏将分为四大模块。 基本原理:剖析Java虚拟机的运行机制,逐一介绍Java虚拟机的设计决策以及工程实现; 高效实现:探索Java编译器,以及内嵌于Java虚拟机中的即时编译器,帮助你更好地理解Java语言特性,继而写出简洁高效的代码; 代码优化:介绍如何利用工具定位并解决代码中的问题,以及在已有工具不适用的情况下,如何打造专属轮子; 虚拟机黑科技:介绍甲骨文实验室近年来的前沿工作之一GraalVM。包括如何在JVM上高效运行其他语言;如何混搭这些语言,实现Polyglot;如何将这些语言事前编译(Ahead-Of-Time,AOT)成机器指令,单独运行甚至嵌入至数据库中运行。