一文带你深入拆解 Java 虚拟机

  • 郑雨迪

2018 年 7 月 17 日

话题:Java语言 & 开发

前不久我参加了一个国外程序员的讲座,讲座的副标题很有趣,叫做“我如何学会停止恐惧,并且爱上 Java 虚拟机”。

这句话来自一部黑色幽默电影《奇爱博士》,电影描述了冷战时期剑拔弩张的氛围。程序员之间的语言之争又未尝不是如此。写系统语言的鄙视托管语言那低下的执行效率;写托管语言的则取笑系统语言需要手动管理内存;写动态语言的不屑于静态语言那冗余的类型系统;写静态语言的则嘲讽动态语言里边各种光怪陆离的运行时错误。

Java 作为应用最广的语言,自然吸引了不少的攻击,而身为 Java 程序员的你,或许在口水战中落了下风,忿忿于没有足够的知识武装自己;又或许想要深入学习 Java 语言,却又无从下手。甚至是在实践中被 Java 的启动性能、内存耗费所震惊,因此对 Java 语言本身产生了种种的怀疑与顾虑。

不过别担心,学习 Java 虚拟机,就可以解答你对 Java 的种种疑虑,做到“知其所以然”——了解 Java 程序是如何被执行且优化的。这样一来,你才可以从内部入手,达到高效编程的目的。与此同时,你也可以为学习更深层级、更为核心的 Java 技术打好基础。

如果我们把核心类库的 API 比做数学公式的话,那么 Java 虚拟机的知识就好比公式的推导过程。掌握数学公式固然可以应付考试,但是了解背后的推导过程更加有助于记忆和理解。并且,在遇到那些没法套公式的情况下,我们也能知道如何解决。

在我 7 年的学习工作生涯中,我拜读过许多大神关于 Java 虚拟机的技术博客,在受益匪浅的同时,我发觉不少文章的门槛都比较高,而且过分注重实现细节,这并不是大多数的开发人员可以受益的调优方案。这么一来,许多原本对 Java 虚拟机感兴趣的同学, 也因为过高的门槛,以及短时间内看不到的收益,而放弃了对 Java 虚拟机的学习。

这是我非常不想看到的。在收到极客时间的邀请后,我决定挑战一下 Java 虚拟机的科普工作,于是有了这个专栏:《深入拆解 Java 虚拟机》。在这个专栏里,我会用简单通俗的语言,来介绍 Java 虚拟机的实现。具体到每篇文章,我将采用一个贯穿全文的案例来阐述知识点,并且给出相应的分析建议。在文章的末尾,我还将附上一个动手实践的环节,帮助你巩固对知识点的理解。

我是谁?

我是郑雨迪,是甲骨文实验室(Oracle Labs)的高级研究员,主要负责研究如何通过程序分析技术以及动态编译技术让程序语言跑得更快。我是全栈虚拟机 Graal 编译器的核心开发者之一,也在为 HotSpot 虚拟机项目添砖加瓦。

这里顺便说明一下,Graal 编译器是 Java 10 正式引入的实验性即时编译器,在国内同行口中被称为“甲骨文黑科技”。其实,我们的工作同样也是分析应用程序的性能瓶颈,寻找优化空间,只不过我们的优化方式对自动化、通用性有更高的要求。因此,我来讲 Java 虚拟机,可以为你提供一些深入的、独特的视角,让你更能洞察 Java 虚拟机的核心。

加入甲骨文之前,我在瑞士卢加诺大学攻读博士学位,研究如何更加精准地监控 Java 程序,以便做出更具针对性的优化。比如,我研究过 JVM 监控工具的“observer effect”,并提出一套针对动态编译的解决方案。这些研究工作均已发表在程序语言方向的顶级会议上,并获得了不少同行的认可。

课程介绍

我的整个专栏将分为四大模块。

  • 基本原理:剖析 Java 虚拟机的运行机制,逐一介绍 Java 虚拟机的设计决策以及工程实现;
  • 高效实现:探索 Java 编译器,以及内嵌于 Java 虚拟机中的即时编译器,帮助你更好地理解 Java 语言特性,继而写出简洁高效的代码;
  • 代码优化:介绍如何利用工具定位并解决代码中的问题,以及在已有工具不适用的情况下,如何打造专属轮子;
  • 虚拟机黑科技:介绍甲骨文实验室近年来的前沿工作之一 GraalVM。包括如何在 JVM 上高效运行其他语言;如何混搭这些语言,实现 Polyglot;如何将这些语言事前编译(Ahead-Of-Time,AOT)成机器指令,单独运行甚至嵌入至数据库中运行。

订阅福利

福利一:限时优惠价¥45,原价¥68,7 月 28 日恢复原价

福利二:每邀请一位好友购买,你可获得 18 元现金返现,多邀多得,上不封顶,立即提现(提现流程:极客时间 App - 我的 - 分享有赏)

如何订阅?

扫描下图二维码,即可订阅。

Java语言 & 开发