11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2018-07-17
  • 本文字数:1663 字

    阅读完需:约 5 分钟

前不久我参加了一个国外程序员的讲座,讲座的副标题很有趣,叫做“我如何学会停止恐惧,并且爱上 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 - 我的 - 分享有赏)

如何订阅?

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

2018-07-17 10:504339

评论

发布
暂无评论
发现更多内容

失败的小项目-外卖cps

箭上有毒

8月日更

oeasy教您玩转vim - 14 - # 行头行尾

o

送你两个神器,关系数据库数据入湖轻松应对

华为云开发者联盟

数据库 数据湖 数据迁移 关系数据库 实时数据

Vue进阶(二十七):Vuex 之 getters, mapGetters, ...mapGetters详解

No Silver Bullet

Vue vuex 8月日更

从0开始的TypeScriptの五:webpack打包typescript

空城机

JavaScript typescript 大前端 8月日更

这几个棘手的面试常见问题,如何高情商的回答?

架构精进之路

情商 8月日更

如果面试官问你 JVM,额外回答逃逸分析技术会让你加分!

陈皮的JavaLib

Java 面试 JVM 逃逸分析 8月日更

【Flutter 专题】70 图解自定义 ACEStepper 步进器

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

LeetCode题解:781. 森林中的兔子,贪心,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Go语言那些事儿之管道的关闭

Regan Yue

Go 语言 8月日更 管道

在openEuler上做开发?这个大赛拿出30万寻找开源的yyds

华为云开发者联盟

开源 操作系统 服务器 openEuler 鲲鹏

Web 框架 Gin | Gin 介绍

xcbeyond

Go 语言 gin 8月日更

JavaScript Array 方法详解

程序员海军

JavaScript 方法 大前端 array 引航计划

【LeetCode】从上到下打印二叉树Java题解

Albert

算法 LeetCode 8月日更

在线年龄计算器

入门小站

工具

Android开发:获取安卓App版本号的方法步骤

三掌柜

8月日更

Mybatis自定义拦截器与插件开发

码农参上

8月日更

Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段

梦想橡皮擦

8月日更

手撸二叉树之将有序数组转换为二叉搜索树

HelloWorld杰少

数据结构与算法 8月日更

Prometheus监控的4个黄金指标

Rubble

Prometheus 8月日更

Android开发:引入重复包报错Error:Execution failed for task ‘:app:transform...’解决方法

三掌柜

8月日更 8月

命令行操作Java程序的那些事~

Bob

Java 命令行 8月日更

一文带你了解 TreeMap ,LinkedHashMap 的主要特点

4ye

Java 后端 hashmap LinkedHashMap 8月日更

金融级IT架构:网商银行是如何进行数字化落地的

博文视点Broadview

七夕赶上服务器架构升级,女朋友的约会怎么办

华为云开发者联盟

华为云 FunctionGraph DevStar Serverless架构 服务器架构

Hive企业级性能优化

五分钟学大数据

hive hive性能优化

全球增长最快的对象存储开源系统MinIO

liuzhen007

8月日更

Linux之netstat命令

入门小站

Linux

netty系列之:自动重连

程序那些事

Java Netty 程序那些事 响应式系统

Rust从0到1-模式-相关语法

rust 语法 模式 Patterns Syntax

small-spring 代码贡献者3个月,敢说精通Spring了,分享我的总结!

小傅哥

spring 小傅哥 cglib aware BeanPost

一文带你深入拆解Java虚拟机_Java_郑雨迪_InfoQ精选文章