Java虚拟机(JVM)家族发展史及版本对比
Java虚拟机(JVM)家族发展史及版本对比
一、JVM家族发展史
1. 早期阶段(1996-2000)
-
Classic VM(Java 1.0-1.1):
- 厂商:Sun Microsystems(Oracle前身)。
- 特点:
- 首个JVM实现,支持基本的字节码解释执行。
- 无JIT编译器,性能较低。
- 垃圾回收简单(标记-清除算法)。
- 适用场景:早期Java Applet和简单应用。
-
Just-In-Time(JIT) VM(Java 1.1.4+):
- 改进:引入JIT编译器,将热点代码编译为本地代码提升性能。
- 局限性:仅对特定方法优化,整体性能仍有限。
2. 成熟阶段(2000-2010)
- HotSpot JVM(Java 1.3+,2000年):
- 厂商:Sun Microsystems(后由Oracle维护)。
- 核心特性:
- 分代垃圾回收(Young/Old代划分)。
- 自适应优化(Adaptive Optimization,动态调整JIT策略)。
- Server模式与Client模式(高性能服务器 vs. 轻量级客户端)。
- 关键版本:
- Java 5(1.5):引入并发标记清除(CMS)垃圾回收器。
- Java 6:优化JIT编译器,支持动态编译更多代码。
- Java 7:改进G1垃圾回收器(实验性)。
3. 现代化阶段(2010至今)
-
HotSpot JVM持续演进:
- Java 8-11:
- G1成为默认GC(Java 9起)。
- ZGC(可中断暂停GC)(Java 11预览,Java 15正式版)。
- Shenandoah GC(Java 12引入,低延迟优化)。
- Java 14+:
- Vector API(SIMD指令优化)。
- 虚拟线程(Virtual Threads)(Java 19正式版,轻量级并发)。
- Java 8-11:
-
开源与生态扩展:
- OpenJDK(2006年开源):
- 成为JVM实现的开源基准,Oracle JDK基于此构建。
- 社区贡献者包括Red Hat、Amazon、IBM等。
- 替代JVM实现:
- GraalVM(Oracle,2017年):
- 支持多语言(Java/JavaScript/Ruby等)。
- Graal编译器:AOT编译(Substrate VM)提升启动速度。
- Truffle框架:动态语言优化。
- Eclipse OpenJ9(IBM,2017年开源):
- 低内存占用,适合微服务和容器化部署。
- 支持JIT和AOT混合编译。
- Azul Zing(Azul Systems,2004年):
- 专为低延迟设计,C4垃圾回收器(无停顿GC)。
- 适用于高频交易、实时系统。
- GraalVM(Oracle,2017年):
- OpenJDK(2006年开源):
-
移动与嵌入式JVM:
- Dalvik VM(Android 1.5-4.4):
- 针对移动设备优化,执行.dex文件(非.class)。
- ART(Android Runtime)(Android 5.0+):
- AOT编译(应用安装时编译为原生代码)。
- 替代Dalvik,提升性能和内存效率。
- Dalvik VM(Android 1.5-4.4):
二、关键虚拟机对比
1. HotSpot JVM(Oracle JDK/OpenJDK)
- 适用场景:企业级应用、服务器端、微服务。
- 核心特性:
- 垃圾回收器:Serial、Parallel、CMS、G1、ZGC、Shenandoah。
- JIT编译:C1(客户端)、C2(服务端)。
- 模块化(Java 9+):JPMS支持模块化JDK。
- 优势:生态成熟、兼容性高、社区支持强。
2. GraalVM
- 适用场景:混合语言应用、高性能微服务、AOT编译场景。
- 核心特性:
- 多语言支持:Java、JavaScript、Python、Ruby等。
- Substrate VM:AOT编译生成独立本机镜像(启动快、占用小)。
- Graal编译器:替代C2编译器,优化复杂代码。
- 优势:跨语言协作、启动性能优化。
3. Eclipse OpenJ9
- 适用场景:容器化部署、内存敏感环境、云原生应用。
- 核心特性:
- 低内存占用:比HotSpot减少30%-50%内存。
- JIT/AOT混合编译:提前编译部分代码提升启动速度。
- Eclipse基金会维护:与Eclipse生态深度集成。
- 优势:资源效率高、适合Kubernetes等容器环境。
4. Azul Zing
- 适用场景:低延迟系统(如金融交易、实时分析)。
- 核心特性:
- C4垃圾回收器:停顿时间<1ms(无STW)。
- 无限制堆内存:支持TB级堆,适合大数据应用。
- 性能分析工具:实时监控GC和线程行为。
- 优势:极致低延迟,适合高频交易等场景。
5. Android ART
- 适用场景:Android应用。
- 核心特性:
- AOT编译:应用安装时编译为原生代码。
- 增量编译:运行时优化未编译部分。
- Profilo工具:性能分析与调试。
- 优势:启动快、运行效率高,替代Dalvik的升级版。
6. IBM J9(旧版,被OpenJ9取代)
- 历史意义:
- IBM早期JVM实现,后开源为OpenJ9。
- 支持Z/OS等大型主机系统。
三、表格总结:JVM家族版本及特性对比
虚拟机名称 | 厂商/来源 | 发布时间 | 核心特性 | 适用场景 | 优势与局限 |
---|---|---|---|---|---|
Classic VM | Sun Microsystems | 1996 | 纯解释执行,无JIT | 早期Java Applet | 性能低,仅基础功能支持 |
HotSpot JVM | Oracle/OpenJDK | 2000 | 分代GC、JIT编译、G1/ZGC/Shenandoah、模块化(Java 9+) | 企业级应用、服务器 | 生态成熟,但资源占用较高 |
GraalVM | Oracle | 2017 | 多语言支持、AOT编译(Substrate VM)、Graal编译器 | 混合语言、微服务、AOT场景 | 需学习成本,某些GC特性依赖HotSpot |
Eclipse OpenJ9 | IBM/Eclipse | 2017 | 低内存占用、JIT/AOT混合编译 | 容器化、云原生 | 性能调优复杂,社区支持有限 |
Azul Zing | Azul Systems | 2004 | C4无停顿GC、TB级堆内存、低延迟 | 高频交易、实时系统 | 闭源商业版,成本较高 |
Android ART | 2014 | AOT编译、增量编译、Profilo工具 | Android应用 | 专为移动优化,不兼容桌面JVM | |
Dalvik VM | 2008 | 针对移动设备优化,执行.dex文件 | Android 1.5-4.4 | 性能较低,已被ART取代 |
四、关键总结
- HotSpot JVM:Java生态的核心,持续演进(GC算法、编译器优化)。
- GraalVM:多语言、AOT编译的革新,适合混合架构。
- OpenJ9:资源效率优先,适合容器化部署。
- Zing:低延迟领域的标杆,专为极端场景设计。
- ART:移动领域的标准,替代Dalvik提升性能。
- 未来趋势:
- 虚拟线程(Java 20):解决线程阻塞问题,提升并发能力。
- AOT编译(GraalVM/Substrate):优化启动时间和部署体积。
- 低延迟GC(ZGC/Shenandoah):扩展实时系统适用性。
相关文章:

Java虚拟机(JVM)家族发展史及版本对比
Java虚拟机(JVM)家族发展史及版本对比 一、JVM家族发展史 1. 早期阶段(1996-2000) Classic VM(Java 1.0-1.1): 厂商:Sun Microsystems(Oracle前身)。特点&…...

【学习笔记】Cadence电子设计全流程(三)Capture CIS 原理图绘制(下)
【学习笔记】Cadence电子设计全流程(三)Capture CIS 原理图绘制(下) 3.16 原理图中元件的编辑与更新3.17 原理图元件跳转与查找3.18 原理图常见错误设置于编译检查3.19 低版本原理图文件输出3.20 原理图文件的锁定与解锁3.21 Orca…...
数据库对象与权限管理-Oracle数据字典详解
1. 数据字典概念讲解 Oracle数据字典是数据库的核心组件,它存储了关于数据库结构、用户信息、权限设置和系统性能等重要的元数据信息。这些信息对于数据库的日常管理和维护至关重要。数据字典在数据库创建时自动生成,并随着数据库的运行不断更新。 数据…...
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
在Qt项目中结合OpenGL与CMake需要配置正确的依赖关系、链接库以及代码结构设计。以下是具体实现步骤和关键要点: 一、环境准备 安装Qt 确保安装包含OpenGL模块的Qt版本(如Qt OpenGL、Qt OpenGLWidgets组件)。安装CMake 使用3.10及以上版本&a…...

OpenCV 图形API(54)颜色空间转换-----将图像从 RGB 色彩空间转换到 HSV色彩空间RGB2HSV()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 RGB 色彩空间转换为 HSV。该函数将输入图像从 RGB 色彩空间转换到 HSV。R、G 和 B 通道值的常规范围是 0 到 255。 输出图像必须是 8 位…...
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
统一HTTP请求代码 public class HttpCode {/*** 操作成功*/public static final int SUCCESS 200;/*** 对象创建成功*/public static final int CREATED 201;/*** 请求已经被接受*/public static final int ACCEPTED 202;/*** 操作已经执行成功,但是没有返回数据…...
#git pull 问题:cannot lock ref ‘xxx‘: ref xxx is at (commitID) but expected ‘xxx‘
问题描述:git在拉取远程代码时出现该提示,拉取失败,导致该问题可能是远程有本地没有跟踪过的(小写大写不同)重名的分支,git是不区分大小写的,所以比如有一个的分支原先是example1.0,…...

JavaWeb学习打卡-Day1-分层解耦、Spring IOC、DI
三层架构 Controller(控制层):接收前端发送的请求,对请求进行处理,并响应数据。Service(业务逻辑层):处理具体的业务逻辑。DAO(数据访问层/持久层)ÿ…...
PostgesSQL外部数据封装FDW
PostgesSQL外部数据封装FDW 1. FDW外部数据配置(单表)1.1 远端数据库创建测试表1.2 安装扩展postges\_fdw1.3 创建外部服务SERVER1.4 创建用户映射USER MAPPING1.5 创建远程表FOREIGN TABLE1.6 数据库更新测试 2. FDW外部数据配置(用户&#…...
redis相关问题整理
Redis 支持多种数据类型: 字符串 示例:存储用户信息 // 假设我们使用 redis-plus-plus 客户端库 auto redis Redis("tcp://127.0.0.1:6379"); redis.set("user:1000", "{name: John Doe, email: john.doeexample.com}"…...

基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现 引言 在数字内容创作领域,高效的辅助工具是连接创意与实现的关键桥梁。创作者需要一款集可视化画布、节点关系管理、数据持久化于一体的专业工具&…...

[Java · 铢积寸累] 数据结构 — 数组类型 - 增 删 改 查
🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java 学习手册 在上一章中我们介绍了如何声明与创建数组,还介绍了数组的基本使用方式。本章我们将在上一章的基础上,拓展数组的使用方式(可能会涉及一些思…...

前端笔记-Axios
Axios学习目标 Axios与API交互1、Axios配置与使用2、请求/响应拦截器3、API设计模式(了解RESTful风格即可) 学习参考:起步 | Axios中文文档 | Axios中文网 什么是Axios Axios 是一个基于 Promise 的现代化 HTTP 客户端库,专…...
vue3数据响应式丢失的情况有哪些
在 Vue 3 中,响应式系统使用的是 Proxy 实现,相比 Vue 2 提升很大,很多 Vue 2 中的数据响应式陷阱都被解决了(比如数组索引、新增属性等),但依然存在一些可能导致“响应式丢失”的情况。 🚨 Vue…...
每日一练(4~23):特别数的和
算法:枚举 题目 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n…...
AR行业应用案例与NXP架构的结合
1. 工业巡检AR头盔 场景示例:宁德核电基地使用AR智能头盔进行设备巡检,通过实时数据叠加和远程指导,将工作效率提升35%。头盔需处理传感器数据、图像渲染和低延迟通信1。 NXP架构支持: 协处理器角色:NXP i.MX RT系列M…...

C# 类型、存储和变量(值类型引用类型)
本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 值类型引用类型 数据项的类型定义了存储数据需要的内存大小及组成该类型的数据成员。类型还决定了对象…...

智慧校园从配电开始:AISD300为校园安全加上智能防护罩
安科瑞刘鸿鹏 摘要 随着校园用电需求不断上升及其安全保障要求的提高,传统低压配电系统已逐渐难以满足现代校园的安全与智能化管理需求。本文基于安科瑞电气推出的AISD300系列三相智能安全配电装置,探讨其在校园电力系统中的应用优势及关键技术特性。…...
如何创建极狐GitLab 议题?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 创建议题 (BASIC ALL) 创建议题时,系统会提示您输入议题的字段。 如果您知道要分配给议题的值,则可…...
如何将极狐GitLab 合并请求导出为 CSV?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 导出合并请求为 CSV (BASIC ALL) 将从项目的合并请求中收集的所有数据导出到逗号分隔值(CSV)文件中。…...

一 、环境的安装 Anaconda + Pycharm + PaddlePaddle
《从零到一实践:系统性学习生成式 AI(NLP)》 一 、环境的安装 Anaconda Pycharm PaddlePaddle 1. Anaconda 软件安装 Anaconda 软件安装有大量的教程,此处不在说明,安装完成之后界面如下: 2. 创建 Anaconda 虚拟环境 Paddl…...

十倍开发效率 - IDEA插件之 Maven Helper
0X00 先看效果 第一个选项表示存在冲突的依赖,可以看到图片中 mysql 的连接依赖发生了冲突,在低版本的上面直接右键选择 Exclude,冲突的依赖就被解决掉了。 0X01 安装 在 Plugins 中直接搜索 Maven Helper,选择第一个进行安装&am…...
Go语言和Python 3的协程对比
Go语言和Python 3都支持协程(concurrent coroutines),但它们的实现机制、使用方式、调度方式和性能表现差异很大。下面是对比分析: 一、基本概念对比 特性Go 协程(goroutine)Python3 协程(asyn…...

人机共跑,马拉松人型机器人同跑
马拉松比赛对人形机器人来说,是一场对硬件极限的测试,涉及机械、传感器、能源管理等多个方面。用户问的是硬件方面的考察和改进,这意味着我的回答需要聚焦于硬件性能,而不是算法或软件的优化。 对人形机器人硬件的考研 机械结构与…...

策略模式:动态切换算法的设计智慧
策略模式:动态切换算法的设计智慧 一、模式核心:定义一系列算法并可相互替换 在软件开发中,常常会遇到需要根据不同情况选择不同算法的场景。例如,在电商系统中,根据不同的促销活动(如满减、折扣、赠品&a…...

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网
一、AP配网技术原理 1.1 配网模式选择 AP配网(SoftAP模式)是IoT设备配网成功率最高的方案之一 1、其核心原理: 设备端:启动AP模式(如SSID格式YC3000_XXXX,默认IP192.168.4.1)手…...

离线-DataX
基本介绍 DataX 是阿里云 DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台,它是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源…...
在Ubuntu上查看PCL(Point Cloud Library)的版本
在Ubuntu上查看PCL(Point Cloud Library)的版本可以通过终端运行命令pcl_viewer --version来实现。该命令将显示PCL库的版本号。 另外,你也可以使用以下命令在终端中查看PCL的版本号: 方法一: dpkg -l | grep libpc…...
RESTful学习笔记(一)
Web发展 一、API 程序硬件接口(Application Programming Interface),是预先定义好的逻辑函数,软件系统不同组成部分衔接的约定,直接调用函数,无序访问代码细节,分为SDK和Web应用接口两类 SDK…...
【汽车ECU电控数据管理篇】S19文件格式解析篇章
一、S19格式是啥 在电控文件管理的初期阶段,我首次接触到的是 A2L 和 HEX 文件。其中,A2L 文件主要承担着描述性功能,它详细地描述了各种参数和配置等相关信息。而 HEX 文件则是一种刷写文件,其内部明确记录了具体的地址以及对应的…...