文章目录
JVM认识
-
Java虚拟机(Java Virtual Machine,JVM)是一个用于执行Java字节码的虚拟计算机。它是Java语言的核心,可以在不同的操作系统和硬件平台上运行Java程序。
-
JVM负责将Java源代码编译成字节码,然后执行字节码,将其转换为操作系统可以理解的机器码。
-
JVM提供了内存管理、垃圾回收和安全性等方面的支持。
-
Java程序员可以使用Java编译器将Java源代码编译成字节码,然后在任何支持JVM的平台上运行。
-
JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。
JVM的功能
-
Java语言如果不做任何优化,性能不如C、C++等语言。
-
Java需要实时解释,主要是为了支持跨平台特性。
-
由于JVM需要实时解释虚拟机指令,不做任何优化性能不如直接运行机器码的C、C++等语言,解决方案:使用即时编译
常见JVM
HotSpot的发展历程
HotSpot是Oracle公司开发的Java虚拟机,是目前使用最广泛的JVM之一。它的发展历程可以简单概括为以下几个阶段:
-
初始版本(1999年):HotSpot最初是由Sun Microsystems公司开发的,旨在提高Java程序的性能。它采用了一种名为"混合模式"的执行方式,将字节码解释执行和即时编译相结合,以提高程序的执行效率。
-
HotSpot 1.3(2000年):HotSpot 1.3是第一个正式发布的版本,引入了许多新特性,包括轻量级锁、逃逸分析、对象压缩等。这些特性大大提高了Java程序的性能和可伸缩性。
-
HotSpot 1.4(2002年):HotSpot 1.4进一步增强了性能和可伸缩性,引入了新的垃圾回收器,包括并行垃圾回收器和CMS垃圾回收器。这些垃圾回收器可以更好地管理内存,减少应用程序的停顿时间。
-
HotSpot 1.5(2004年):HotSpot 1.5是一个重要的版本,引入了许多新特性,包括自动内存管理、JIT编译器的优化等。这些特性大大提高了Java程序的性能和可伸缩性,使得Java成为了一种更加高效的编程语言。
-
HotSpot 1.6(2006年):HotSpot 1.6进一步增强了性能和可伸缩性,引入了新的垃圾回收器,包括G1垃圾回收器。这些垃圾回收器可以更好地管理内存,减少应用程序的停顿时间。
-
HotSpot 1.7(2011年):HotSpot 1.7引入了新的垃圾回收器,包括G1垃圾回收器和CMS垃圾回收器的改进版。同时,它还引入了新的语言特性,包括钻石操作符、try-with-resources语句等。
-
HotSpot 1.8(2014年):HotSpot 1.8是当前最新的版本,引入了许多新特性,包括lambda表达式、Stream API等。同时,它还提高了性能和可伸缩性,引入了新的垃圾回收器,包括G1垃圾回收器的改进版。
自HotSpot 1.8发布以来,Java虚拟机和Java语言都经历了许多变化,以下是HotSpot在2014年以后的主要发展:
-
HotSpot 9(2017年):HotSpot 9是一个重要的版本,引入了模块化系统(Java Platform Module System,JPMS),这是Java 9的一个重要特性。JPMS允许开发人员将Java代码组织成模块,以提高可维护性和安全性。
-
HotSpot 10(2018年):HotSpot 10是一个小版本,引入了一些新特性,包括本地变量类型推断、应用类数据共享等。本地变量类型推断允许开发人员在不显式指定变量类型的情况下声明变量,从而提高代码的可读性和简洁性。应用类数据共享则可以减少JVM的启动时间和内存占用。
-
HotSpot 11(2018年):HotSpot 11是一个重要的版本,是Java 11的默认JVM。它引入了许多新特性,包括ZGC垃圾回收器、Epsilon垃圾收集器、HTTP客户端API等。ZGC垃圾回收器是一种可伸缩的垃圾回收器,可以在数百兆字节到数千兆字节的堆大小范围内实现低延迟的垃圾回收。Epsilon垃圾收集器则是一种无操作的垃圾收集器,它不会回收任何对象,用于测试和性能调优。HTTP客户端API则是一种新的HTTP客户端实现,提供了更好的性能和可扩展性。
-
HotSpot 14(2020年):HotSpot 14引入了一些新特性,包括JFR事件流API、ZGC并发堆释放、NUMA感知的内存分配等。JFR事件流API允许开发人员将Java Flight Recorder(JFR)事件导出到其他系统中进行分析和处理。ZGC并发堆释放可以在垃圾回收期间释放堆内存,减少应用程序的停顿时间。NUMA感知的内存分配可以提高多个虚拟机在NUMA架构下的性能。