JVM 概述

JVM概述

JVM的全为 Java Virtual Machine,但是目前的 JVM 已经不再与任何语言进行深度耦合了,其本质就是运行在计算机上的程序,职责是运行处理 Java 字节码文件。

JVM 功能

解释和运行

JVM 会对字节码文件中的指令,实时的解释为机器码,在计算机上执行。

内存管理

  1. JVM 会自动为对象、方法等分配内存。
  2. JVM 的自动垃圾回收机制,会及时回收不再使用的对象,减少内存不必要的占用。

即时编译(JIT:Just In Time)

JVM 会对热点代码进行优化,可以大大提升 Java 代码的执行效率。

因为 Java 语言为了支持跨平台特性,需要进行实时解释。

一份同样的字节码文件,在Windows、Linux等不同的操作系统,会根据其环境的JDK,将字节码解释成该系统能够执行的机器码,然后才会交给底层的操作系统去执行。正因如此,如果 Java 不做任何处理,其性能不如 C、C++ 等语言。

为了解决这个问题,Java 会将热点代码字节码指令(即会被多次执行的代码片段),将其解释优化成机器码之后先保存在内存中一份,等到下一次执行的时候,就直接从内存中取出已经编译好的机器码直接使用,这样就会大大提高效率。

常见的JVM

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

JVM 的组成

  • 类加载器:加载 class 字节码文件中的内容到内存中。
  • 运行时数据区:负责管理 JVM 使用到的内存,例如创建对象和销毁对象时的内存管理。
  • 执行引擎:将字节码文件中的指令解释为机器码,同时使用即时编译器优化性能。
  • 本地接口:JVM 有的采用 C/C++ 语言进行编写,所以需要调用本地提供的已经编译的方法,这些方法并不存在于字节码文件中。
相关推荐
会开花的二叉树5 分钟前
彻底搞懂 Linux 基础 IO:从文件操作到缓冲区,打通底层逻辑
linux·服务器·c++·后端
lizhongxuan14 分钟前
Spec-Kit 使用指南
后端
渣哥19 分钟前
我和Java 8 Stream相爱相杀的那些年
java
爱吃烤鸡翅的酸菜鱼21 分钟前
【Spring】原理解析:Spring Boot 自动配置
java·spring boot
小白兔35321 分钟前
一文讲通Unicode规范、UTF-8与UTF-16编码及在Java中的验证
java
十八旬27 分钟前
苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
java·数据库·spring boot·redis·缓存·spring cache
会豪31 分钟前
工业仿真(simulation)--发生器,吸收器,缓冲区(2)
后端
SamDeepThinking31 分钟前
使用Cursor生成【财务对账系统】前后端代码
后端·ai编程·cursor
饭碗的彼岸one32 分钟前
C++ 并发编程:异步任务
c语言·开发语言·c++·后端·c·异步
会豪37 分钟前
工业仿真(simulation)--仿真引擎,离散事件仿真(1)
后端