目录
一、什么是JVM?
1、JVM的全称
JVM全称是Java Virtual Machine,中文译名为:Java虚拟机。
2、JVM的职责
JVM本质上是一个运行在计算机上的程序,它的职责是运行Java字节码文件。
举例:
等到JVM拿到HelloWorld.class字节码文件时,它的任务是将该字节码文件,解释(翻译)成机器码,这样才能被我们的计算机识别。过程如下:
二、JVM的功能
1、解释字节码文件(上面提到了)
- JVM对字节码文件中的指令,实时的解释成机器码,才能让计算机执行。
2、内存管理
- JVM自动为对象、方法分配内存。
- JVM自动的垃圾回收机制,回收不再使用的对象。
在C语言中,对象回收需要程序员手动去写代码实现,如果程序员水平有限,那么可能导致不使用的对象永久存在而不会被回收。
3、即时编译(Just-In-Time,简称JIT)
- 对热点代码(很短时间被多次调用的代码)进行优化,提升执行效率。
Java语言如果不做任何优化,性能不如C、C++等语言,因为多了一个JVM将字节码文件解释成机器码的过程。
那么JVM团队也意识到了这个问题,于是推出了JVM的即时编译,来优化性能:
即时编译,就是将短时间内被多次调用的Java代码对应的字节码指令,解释成机器码,然后保存在内存中,等到下次再调用这些代码时,就不用再进行解释了,而是直接从内存中调取刚才存入的机器码。这样一优化,就使得Java语言的性能不逊色于C、C++,甚至是超越。
三、常见的JVM
1、常见的几种JVM
思考:能不能随意地开发一款JVM(Java虚拟机)呢?
答案:不能!需要遵循《Java虚拟机规范》。
下面介绍上图中的几款JVM:
- HotSpot(Oracle JDK版)(默认在JDK中包含的java虚拟机):
这款虚拟机使用最广泛,稳定可靠,社区活跃,因此没特殊需求,HotSpot这款JVM使我们的首选。但是HotSpot这款虚拟机缺点是源代码不能提供给我们修改,是闭源的。
- HotSpot(Open JDK版):
这款虚拟机是开源的,满足了人们对JVM有二次开发的需求。
- GraalVM:
这款虚拟机支持多种编程语言,如:Ruby、Python、C++等。而且适用于微服务、云原生架构。后面会重点学习该虚拟机。
- Dragonwell JDK:
这款虚拟机适用于电商、物流、金融领域,即:对性能要求比较高的领域。
- Eclipse OpenJ9:
适用于微服务、云原生架构。
2、HotSpot(Oracle JDK版)的发展历程
HotSpot(Oracle JDK版)这款Java虚拟机,是JDK默认包含的虚拟机。