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正式版,轻量级并发)。
  • 开源与生态扩展

    • 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)。
        • 适用于高频交易、实时系统。
  • 移动与嵌入式JVM

    • Dalvik VM(Android 1.5-4.4):
      • 针对移动设备优化,执行.dex文件(非.class)。
      • ART(Android Runtime)(Android 5.0+):
        • AOT编译(应用安装时编译为原生代码)。
        • 替代Dalvik,提升性能和内存效率。

二、关键虚拟机对比

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 VMSun Microsystems1996纯解释执行,无JIT早期Java Applet性能低,仅基础功能支持
HotSpot JVMOracle/OpenJDK2000分代GC、JIT编译、G1/ZGC/Shenandoah、模块化(Java 9+)企业级应用、服务器生态成熟,但资源占用较高
GraalVMOracle2017多语言支持、AOT编译(Substrate VM)、Graal编译器混合语言、微服务、AOT场景需学习成本,某些GC特性依赖HotSpot
Eclipse OpenJ9IBM/Eclipse2017低内存占用、JIT/AOT混合编译容器化、云原生性能调优复杂,社区支持有限
Azul ZingAzul Systems2004C4无停顿GC、TB级堆内存、低延迟高频交易、实时系统闭源商业版,成本较高
Android ARTGoogle2014AOT编译、增量编译、Profilo工具Android应用专为移动优化,不兼容桌面JVM
Dalvik VMGoogle2008针对移动设备优化,执行.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):扩展实时系统适用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嘻游电玩三端客户端部署实战:PC + Android + iOS 环境全覆盖教程

本篇文章将针对“网狐系列嘻游电玩组件”的三端客户端&#xff08;PC端、安卓端、iOS端&#xff09;进行详细部署实操讲解。文章将以实测部署为核心&#xff0c;提供资源结构说明、平台适配调整、打包配置、常见问题修复&#xff0c;并辅以必要的关键配置代码。 一、客户端资源…

LabVIEW实现Voronoi图绘制功能

该 LabVIEW 虚拟仪器&#xff08;VI&#xff09;借助 MathScript 节点&#xff0c;实现基于手机信号塔位置计算 Voronoi 图的功能。通过操作演示&#xff0c;能直观展示 Voronoi 图在空间划分上的应用。 各部分功能详细说明 随机地形创建部分 功能&#xff1a;根据 “Maximum a…

web刷题笔记

2024isctf ezrce 禁用了一些关键字符&#xff0c;查询函数&#xff0c;系统执行函数&#xff0c;执行函数都有&#xff0c;空格也和斜杆也禁用了&#xff0c;但是其他一些很大一部分字符都没有禁用&#xff0c;属于关键词禁用的类型&#xff0c;正常的步骤是去查一下列表&#…

集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解

本篇将全面解构“水浒传”子游戏的服务端核心逻辑、帧同步机制、鱼群刷新规则、客户端命中表现与服务器计算之间的协同方式&#xff0c;聚焦于 C 与 Unity3D 跨端同步的真实实现过程。 一、水浒传捕鱼模块资源结构 该模块包含三部分核心目录&#xff1a; 子游戏/game_shuihuz…

【产品经理从0到1】原型及Axure介绍

原型分类 原型的三种分类&#xff1a; 草图原型&#xff1a;⼿绘稿&#xff0c;制作⽅便&#xff0c;修改不⽅便&#xff1b;低保真原型&#xff1a;简单交互&#xff0c;⽆设计图&#xff1b; 最好的原型是⿊⽩灰的&#xff1b;⾼保真原型&#xff1a;复杂交互&#xff0c;有…

CVE-2024-23897-Jenkins 2.441之前版本存在任意文件读取漏洞

1.漏洞介绍 Jenkins 2.441及更早版本&#xff0c;以及LTS 2.426.2及更早版本没有禁用其CLI命令解析器的一个功能&#xff0c;该功能会将参数中字符后跟的文件路径替换为该文件的内容&#xff0c;允许未经身份验证的攻击者读取Jenkins控制器文件系统上的任意文件。 2.poc利用 下…

PostgreSQL性能调优与内核优化怎么做?

PostgreSQL 的高级性能调优和内核优化是PGCM认证的核心能力之一&#xff0c;也是企业级数据库场景中解决性能瓶颈的关键手段。以下是直白易懂的实战解析&#xff1a; 一、性能调优&#xff1a;让数据库“跑得更快” 1. 执行计划优化 问题场景&#xff1a;一个复杂查询耗时10秒…

DeepSeek是否采用了混合专家(MoE)架构?它如何提升模型效率?

引言 最近&#xff0c;关于DeepSeek是否采用混合专家&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;架构的讨论越来越多。MoE技术因其高效的计算特性&#xff0c;已经成为大模型训练的热门选择。那么&#xff0c;DeepSeek到底有没有用MoE&#xff1f;如果用了&am…

HTTP 请求头与请求体:数据存储的底层逻辑与实践指南

文章目录 一、数据承载的本质差异1.1、请求头:元数据的 "集装箱"1.2、请求体:业务数据的 "运输舱"二、请求方式的选择逻辑2.1、GET 请求:无体的轻量级交互2.2、POST 请求:体数据的主力军2.3、PUT/PATCH 请求:体数据的更新场景三、参数属性的深度解析3…

【网工第6版】第5章 网络互联②

目录 ■ IPV6 ▲ IPV6报文格式 ◎ IPV6扩展报头&#xff08;RFC2460&#xff09; ◎ IPv6相关协议 ▲ IPV6地址分类 ◎ IPv6地址基础 ◎ IPv6地址举例 ◎ IPv6地址分类 ◎ 特殊地址对比IPv4 vs IPv6 ▲ 过渡技术 本章重要程度&#xff1a;☆☆☆☆☆ ■ IPV6 与IPv4…

关于 梯度下降算法、线性回归模型、梯度下降训练线性回归、线性回归的其他训练算法 以及 回归模型分类 的详细说明

以下是关于 梯度下降算法、线性回归模型、梯度下降训练线性回归、线性回归的其他训练算法 以及 回归模型分类 的详细说明&#xff1a; 1. 梯度下降算法详解 核心概念 梯度下降是一种 优化算法&#xff0c;用于寻找函数的最小值。其核心思想是沿着函数梯度的反方向逐步迭代&a…

[SpringBoot]快速入门搭建springboot

默认有spring基础&#xff0c;不会一行代码一行代码那么细致地讲。 SpringBoot的作用 Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的。就像我们整个SSM框架时&#xff0c;就常常会碰到版本导致包名对不上、Bean非法参数类型的一系列问题&#xff08;原出…

ROS-真机向虚拟机器人映射

问题描述 ROS里的虚拟机械臂可以实现和真实机械臂的位置同步&#xff0c;真实机械臂如何动&#xff0c;ROS里的虚拟机械臂就如何动 效果 步骤 确保库卡机械臂端安装有EthernetKRL辅助软件和KUKAVARPROXY 6.1.101&#xff08;它是一个 TCP/IP 服务器 &#xff0c;可通过网络实…

ubuntu--安装双系统

教程 BIOS设置 启动盘生成和ubuntu安装 boot option #1设置USB为第一启动项 rufus下载 官网&#xff1a; 链接 点击“链接”下面的按钮&#xff0c;即可下载。(注意查看自己的电脑是x64还是x84) 网盘下载&#xff1a; 链接

Python项目--基于计算机视觉的手势识别控制系统

1. 项目概述 1.1 项目背景 随着人机交互技术的快速发展&#xff0c;传统的键盘、鼠标等输入设备已经不能满足人们对自然、直观交互的需求。手势识别作为一种非接触式的人机交互方式&#xff0c;具有操作自然、交互直观的特点&#xff0c;在智能家居、游戏控制、虚拟现实等领域…

LabVIEW数据采集与传感系统

开发了一个基于LabVIEW的智能数据采集系统&#xff0c;该系统主要通过单片机与LabVIEW软件协同工作&#xff0c;实现对多通道低频传感器信号的有效采集、处理与显示。系统的设计旨在提高数据采集的准确性和效率&#xff0c;适用于各种需要高精度和低成本解决方案的工业场合。 项…

java Springboot使用扣子Coze实现实时音频对话智能客服

一、背景 因公司业务需求&#xff0c;需要使用智能客服实时接听顾客电话。 现在已经完成的操作是&#xff0c;智能体已接入系统进行对练&#xff0c;所以本文章不写对联相关的功能。只有coze对接&#xff5e; 扣子提供了试用Realtime WebSocket&#xff0c;点击右上角setting配…

栈和字符串,力扣.43.字符串相乘力扣1047.删除字符串中的所有相邻重复项力扣.844比较含退格的字符串力扣227.基本计算器II

目录 力扣.43.字符串相乘 力扣1047.删除字符串中的所有相邻重复项 力扣.844比较含退格的字符串 力扣227.基本计算器II 力扣.43.字符串相乘 我们剩下的落两个数字即可。 class Solution {public static String multiply(String num1, String num2) {int mnum1.length();int n…

Spring Boot单元测试实战指南:从零到高效测试

在Spring Boot开发中&#xff0c;单元测试是保障代码质量的核心环节。本文将基于实际开发场景&#xff0c;手把手教你如何快速实现分层测试、模拟依赖、编写高效断言&#xff0c;并分享最佳实践&#xff01; 一、5分钟环境搭建 添加依赖 在pom.xml中引入spring-boot-starter-te…

React状态提升深度解析:原理、实战与最佳实践

一、状态提升的本质认知 React状态提升&#xff08;State Lifting&#xff09;是组件间通信的核心模式&#xff0c;其本质是通过组件树层级关系重构实现状态共享。与传统父子传参不同&#xff0c;它通过将状态提升到最近的共同祖先组件&#xff0c;建立单向数据流高速公路。 …