深入拆解Java虚拟机

极客时间《深入拆解Java虚拟机》 | 郑雨迪 | Oracle高级研究员

好记性不如烂笔头,做下笔记顺便加强一下记忆,之前了解虚拟机笔记零散,准备借此机会梳理一下。

为什么我们要学习Java虚拟机?

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

了解Java虚拟机有如下好处:

  1. 优化:Java虚拟机提供了很多配置参数,用于满足不同应用场景下,对程序性能的需求。学习Java虚拟机,你可以针对自己的应用,最优化匹配运行参数。

  2. 避险:Java虚拟机本身是一种工程产品,在实现过程中自然存在不少局限性。学习Java虚拟机,可以更好地规避它在使用过程中的bug,也可以更快地识别出Java虚拟机中的错误。

  3. 触类旁通:Java虚拟机拥有当前最前沿、最成熟的垃圾回收算法,以及即时编译器实现。学习Java虚拟机,我们可以了解其背后的设计决策,今后再遇到其他代码托管技术也能触类旁通。

  4. 百发齐放:Java虚拟机发展到今天,已经脱离Java语言,形成一套相对独立的、高性能的执行方案。除了Java以外,Scala、Clojure、Groovy,以及时下热门的Kotlin,这些语言都可以运行在Java虚拟机上。学习Java虚拟机,便可以了解这些语言的通用机制,甚至于让这些语言共享生态系统。

基本原理

剖析Java虚拟机的运行机制,逐一介绍Java虚拟机的设计决策以及工程实现。

  1. Java代码是怎么运行的?
  2. Java的基本类型
  3. Java虚拟机是如何加载Java类的?

高效实现

探索Java编译器,以及内嵌于Java虚拟机中的即时编译器,帮助你更好地理解Java语言特性,继而写出简洁高效的代码。

代码优化

介绍如何利用工具定位并解决代码中的问题,以及在已有工具不适用的情况下,打造专属轮子。

虚拟机黑科技

介绍甲骨文实验室近年来的前沿工作之——GraalVM。包括如何在JVM上高效运行其他语言;如何混搭这些编程语言,实现Polyglot;如何将这些语言事前编译(Ahead-Of-Time, AOT)成机器指令,单独运行甚至嵌入数据库中运行。