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++ 语言进行编写,所以需要调用本地提供的已经编译的方法,这些方法并不存在于字节码文件中。
相关推荐
会员源码网11 分钟前
使用`mysql_*`废弃函数(PHP7+完全移除,导致代码无法运行)
后端·算法
洛森唛1 小时前
ElasticSearch查询语句Query String详解:从入门到精通
后端·elasticsearch
用户8307196840821 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
小兔崽子去哪了1 小时前
Java 自动化部署
java·后端
Selicens1 小时前
git批量删除本地多余分支
前端·git·后端
哈密瓜的眉毛美1 小时前
Java 基础补充:零基础学Java | Scanner 类详解
后端
ma_king1 小时前
入门 java 和 数据库
java·数据库·后端
平平无奇的开发仔1 小时前
Mybaitis 项目多模块多依赖xml加载classpath:和classpath*:的区别
后端
后端AI实验室1 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
神奇小汤圆2 小时前
MySQL的10种高级SQL,性能飞升
后端