1. 什么是JVM
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
(1)一个A.java文件执行javac命令后编程成A.class文件
(2)class文件会被ClassLoader装载到内存中,同时装载java相关核心类库
(3)调用字节码解释器或即时编译器(java是解释器和编译器混合执行)
(4)执行引擎调用操作系统或硬件运行
2. JVM是跨语言的平台
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
任何语言只要满足class文件结构规范就可以在JVM上运行。
3.常见的JVM
- Hotspot
oracle官方,目前使用的最多的 Java 虚拟机。 - Jrocket
原来属于BEA 公司,曾号称世界上最快的 JVM,后被 Oracle 公司收购,合并于 Hotspot。 - J9
IBM 有自己的 java 虚拟机实现,它的名字叫做 J9. 主要是用在 IBM 产品(IBM WebSphere 和 IBM 的 AIX 平台上)。 - Microsoft VM
微软Java虚拟机,为IE浏览器提供Java支持。 - TaobaoVM
只有一定体量、一定规模的厂商才会开发自己的虚拟机,比如淘宝有自己的 VM,它实际上是 Hotspot 的定制版,专门为淘宝准备的,阿里、天 猫都是用的这款虚拟机。 - LiquidVM
它是一个针对硬件的虚拟机,它下面是没有操作系统的(不是 Linux 也不是 windows),下面直接就是硬件,运行效率比较高。 - zing
它属于 zual 这家公司,非常牛,是一个商业产品,很贵!它的垃圾回收速度非常快(1 毫秒之内),是业界标杆。它的一个垃圾回收的算法后来被 Hotspot 吸收才有了现在的 ZGC。
4. 码农来洞见
对于JVM的学习,一般而言,我觉得还是掌握了Java语法之后,或者使用Java语言一段时间之后,再去学习JVM可能会更好一些。
我们可以通过模仿先学习招式,不要怕邯郸学步,东施效颦的笨拙;然后再通过反复刻意的训练,修练内功直至融会贯通。
学习路线推荐:
(1)先在网上查找资料了解JVM基础知识,比如class文件格式、字节码、类加载器等等。然后动手编写java文件生成class文件熟悉class文件结构和字节码(一般看16进制)。
(2)阅读电子书进入系统学习,推荐周志明的《 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) 》。
(3)去oracle官网阅读Java虚拟机规范。
(4)阅读OpenJDK源码,尝试动手编写简单的Java虚拟机。
一般开发人员完成前2个阶段就足够了。有兴趣的可以阅读官网虚拟机规范。最后一阶段据说阿里也就屈指可数的几位能写虚拟机。