一文带你深入拆解Java虚拟机
Posted InfoQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文带你深入拆解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”,并提出一套针对动态编译的解决方案。这些研究工作均已发表在程序语言方向的顶级会议上,并获得了不少同行的认可。
我的整个专栏将分为四大模块。
基本原理: 剖析 Java 虚拟机的运行机制,逐一介绍 Java 虚拟机的设计决策以及工程实现;
高效实现: 探索 Java 编译器,以及内嵌于 Java 虚拟机中的即时编译器,帮助你更好地理解 Java 语言特性,继而写出简洁高效的代码;
代码优化: 介绍如何利用工具定位并解决代码中的问题,以及在已有工具不适用的情况下,如何打造专属轮子;
虚拟机黑科技: 介绍甲骨文实验室近年来的前沿工作之一 GraalVM。包括如何在 JVM 上高效运行其他语言;如何混搭这些语言,实现 Polyglot;如何将这些语言事前编译(Ahead-Of-Time,AOT)成机器指令,单独运行甚至嵌入至数据库中运行。
福利一:限时优惠价¥45,原价¥68,7 月 28 日恢复原价
福利二:每邀请一位好友购买,你可获得 18 元现金返现,多邀多得,上不封顶,立即提现(提现流程:极客时间 App - 我的 - 分享有赏)
如果你是苹果用户,扫描下图二维码或戳阅读原文,即可订阅。
如果你是安卓用户,点击下图,微信支付,即可订阅。
以上是关于一文带你深入拆解Java虚拟机的主要内容,如果未能解决你的问题,请参考以下文章