掘金 后端 ( ) • 2024-04-10 15:45

前言

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。同时,JVM还具备动态优化功能,可以根据实际运行情况进行调整和优化。本文主要介绍了JVM的概念、JVM的三大核心功能、常见的JVM虚拟机等内容。


一、 JVM概念

JVM,全称Java Virtual MachineJava虚拟机),是一个运行在计算机上的程序,其核心任务是运行Java字节码文件。Java字节码是一种中间代码,它是由Java源代码编译而来,但并非直接运行在硬件或操作系统上,而是通过JVM来解释或编译执行。这一设计使得Java能够在任何支持JVM的平台上运行,真正实现了“一次编写,到处运行”的理念。

二、JVM的三大核心功能

1.内存管理

JVM的内存管理是整个虚拟机中非常重要的部分。其负责管理堆内存,这是JVM中用于动态分配内存的区域。当Java程序创建对象时,JVM会在堆上为该对象分配内存。这种分配是动态的,意味着可以根据需要调整内存的大小。

堆内存的管理涉及到两个主要方面:对象的创建对象的销毁。当一个对象被创建时,JVM会在堆上为其分配内存。这个过程涉及到内存的分配和初始化,确保对象能够正确地存储数据。而当对象不再被引用,或者程序结束时,JVM会自动回收这些内存,以释放资源。

内存管理还包括垃圾回收(Garbage Collection, GC)机制。垃圾回收器自动检测并清除那些不再被引用的对象,释放其占用的内存。这一过程是为了防止内存泄漏,并确保系统的稳定运行。

2.解释执行虚拟机指令

解释执行是JVM执行Java字节码的一种方式。Java源代码在编译时会被转换成字节码,这是一种中间代码,它不直接对应任何特定的硬件架构。然后,JVM通过解释器逐条解释这些字节码并执行相应的操作。

解释执行的优势在于它的跨平台性。由于字节码是中间代码,无论在哪种操作系统或硬件平台上,只要安装了对应的JVM,就可以运行Java程序。这极大地提高了Java的跨平台能力。

然而,解释执行也有其缺点,主要是执行速度相对较慢。为了提高程序的执行效率,一些高级的JVM会使用即时编译(JIT)技术。

3.即时编译

即时编译(Just-In-Time)是一种优化技术,它在程序运行时将热点代码编译成本地机器码。这些热点代码通常是频繁执行的代码片段,将它们编译成本地代码可以显著提高执行速度。

即时编译的优势在于它能够根据运行时的实际情况进行优化。JVM可以监测代码的执行情况,识别出那些频繁执行的热点代码,然后将其编译成本地机器码。这不仅提高了执行速度,而且减少了解释器的工作负担。

即时编译的实现通常包括两个步骤:编译优化。编译是将字节码转换成机器码的过程,而优化则是在编译的基础上进一步提高代码的执行效率。通过即时编译,JVM能够在运行时动态地调整和优化代码的执行,从而提高程序的性能。

​​

三、常见的JVM虚拟机

常见的JVM:

名称 公司 支持版本 社区活跃度 特性 适用场景 HotSpot(Oracle JDK版) Oracle 所有版本 高 使用最广泛,稳定可靠,社区活跃JIT支持Oracle JDK默认虚拟机 默认 HotSpot(Open JDK版) Oracle 所有版本 中 同上开源,Open JDK默认虚拟机 默认对JDK有二次开发需求 GraalVM Oracle 11, 17,19企业版支持8 高 多语言支持高性能、JIT、AOT支持 微服务、云原生架构需要多语言混合编程 Dragonwell JDK龙井 Alibaba 标准版 8,11,17扩展版11,17 低 基于OpenJDK的增强高性能、bug修复、安全性提升JWarmup、ElasticHeap、Wisp特性支持 电商、物流、金融领域对性能要求比较高 Eclipse OpenJ9(原 IBM J9) IBM 8,11,17,19,20 低 高性能、可扩展JIT、AOT特性支持 微服务、云原生架构

1.HotSpot

HotSpot是由Oracle(原Sun Microsystems)开发的一款高性能的JVM,被广泛使用。为了提高Java程序的执行效率,HotSpot虚拟机采用了多种优化技术,其中最核心的是即时编译技术。此外,HotSpot虚拟机还支持一种称为“混合编译”的优化技术,它将解释执行和即时编译结合起来,进一步优化程序的性能。

除了即时编译技术外,HotSpot虚拟机还具有其他高性能特性。它优化了垃圾回收器和内存管理器,为Java程序提供了高效、稳定的运行环境。这些特性共同作用,使HotSpot成为高性能、可扩展的JVM,广泛适用于各种应用程序和场景。

2.GraalVM

GraalVM是一个高性能的运行时环境,可以运行多种语言的程序,包括Java、JavaScript、Python等。它旨在提供一种统一的运行时环境,以支持各种不同的编程语言和框架。

GraalVM通过使用即时编译和垃圾回收技术来提高程序的执行效率。它还提供了一种称为“Truffle”的框架,用于实现自定义语言的解释器和编译器。通过Truffle框架,开发者可以使用高级语言编写程序,并利用GraalVM的高性能特性来运行它们。

除了高性能的即时编译和垃圾回收功能外,GraalVM还支持多种语言的互操作性。这意味着开发者可以在同一个应用程序中使用不同的编程语言,并轻松地调用和交互它们的功能。这种互操作性使得GraalVM成为一种灵活、高效的多语言运行时环境。

3.Dragonwell JDK 龙井

Dragonwell JDK是阿里巴巴提供的一款功能增强版的JVM。它基于HotSpot虚拟机进行了一些优化和增强,旨在提高Java程序的性能和稳定性。

Dragonwell JDK通过优化HotSpot虚拟机的内部机制来提高Java程序的执行效率。它涉及对垃圾回收器、即时编译器和其他核心组件的调整和改进。这些优化旨在提高程序的启动速度、运行时的性能以及减少资源消耗。

除了性能优化外,Dragonwell JDK还提供了一些额外的功能和工具,以增强开发者的体验和应用程序的质量。其中包括对特定于中国市场的特性的支持、更好的调试和监控工具以及对最新Java版本的早期支持等。

4. Eclipse OpenJ9

OpenJ9是IBM开发的一款高性能的JVM,它不仅支持Java SE标准,还提供了强大的垃圾回收和诊断工具。作为一款专为企业级应用打造的高性能JVM,OpenJ9致力于为应用程序提供稳定、高效的运行环境。

OpenJ9虚拟机具有优化的垃圾回收机制,可以有效地管理内存并减少内存泄漏的风险。它还提供了一套丰富的诊断工具,帮助开发者和系统管理员监控和调试Java应用程序。这些工具包括性能分析器、内存监视器和线程分析器等,可以帮助开发者分析程序的性能瓶颈和解决潜在问题。

OpenJ9在大型企业级应用和关键任务应用中得到了广泛应用。它被认为是一种可靠、高性能的JVM选择,适用于需要高可用性和可扩展性的应用程序场景。


总结

JVM是Java程序的运行环境,负责字节码解释、内存管理、安全保障、多线程支持、性能监控和跨平台运行。本文主要介绍了JVM的概念、JVM的三大核心功能、常见的JVM虚拟机等内容,希望对大家有所帮助。