JVM系列(一) -浅谈虚拟机的成长史

news2024/11/24 15:39:47

一、摘要

众所周知,Java 经过多年的发展,已经从一门单纯的计算机编程语言,发展成了一套成熟的软件解决方案。从互联网到企业平台,Java 是目前使用最广泛的编程语言。

以下这段内容是来自 Java 的官方介绍!

从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在!

无论是是互联网公司还是传统的企业,在研发数字化平台系统时,世界上绝大部分的公司基本上都会首选采用 Java 来开发,以助力企业的数字化转型和生产效率的提升,原因就不多说了,安全、稳定、高性能、跨平台等等,其实还有一个很大的优势:好招人,哈哈哈~~

而 Java 之所以如此有魅力,不仅限于它优秀的程序语言设计,其中还有一个很重要的原因得益于它的虚拟机平台设计,通过它的虚拟机可以轻松实现应用程序跨平台运行,实现“一次编写,到处运行”的目标,并且还可以取得不错的运行效率。

二、Java 简介

在介绍虚拟机之前,我们还是简单的回顾一下 Java 的发展故事。

Java 最早是由 SUN 公司的一个小工程师团队在上个世纪 90 年代初开发的一种编程语言,其中詹姆斯·高斯林是项目负责人(人称 Java 之父),编程语言最初被命名为 Oak,以他们的办公室外的橡树而命名,后来因为 Oak 已经被人注册了,因此重新改名成 Java。

在此,我们附上一张 Java 之父的光辉图片!

当时的目标是将其用于开发数字有线电视行业的嵌入式应用程序,例如机顶盒、智能电视等数字设备,实现无障碍的运行。结果推出以后,市场没啥反响。4 年后,技术小组不得不解散。

但也就在此时,互联网刚刚崛起,恰巧这时 MarkArdreesen 开发的 Mosaic 和 Netscape 启发了 Oak 项目组成员,他们利用 Java 编写了 HotJava 浏览器,HotJava 拥有了在页面中运行 Java 代码的能力,可以无障碍的运行在各个电脑设备上,这个效果得到了 Sun 公司首席执行官 ScottMcNealy 的支持,触发了 Java 进军 Internet 的决心。

这在当时引起了不小的轰动,人们从中似乎看到了互联网未来该有的样子,一时间,Java 受到了众多厂商和开发者的追捧。于是趁热打铁,Sun 在 1996 年正式发布了 JDK1.0,当时最主要的十个操作系统厂商宣布,将在它们的系统中支持 Java 程序的运行,从此在互联网高速发展中大杀四方。

Java 之所以能在互联网发展中获得广泛的开发者支持,一个很重要的原因就是它可以实现“一次编写,到处运行”的效果,极大的省去了软件开发工作量,能实现这种效果主要得益于 Java 的架构理念设计。

像 C、C++ 等编程语言,代码是直接编译成机器码执行,虽然很快,但是不同的平台(x86、ARM等) CPU 的指令集也不同,每次开发一个应用程序需要编译出每一种平台的对应机器码,非常麻烦。

Java 则不同,它会将代码编译成一种“字节码”,它类似于抽象的 CPU 指令,然后虚拟机负责加载字节码,根据不同的平台编译成对应的机器码并执行,这样就可以实现了“一次编写,到处运行”的效果。

当然,对于虚拟机,需要针对每个平台分别开发,为了保证不同平台、不同公司开发的虚拟机都能正确执行 Java 字节码,SUN 公司制定了一系列的 Java 虚拟机规范。从实践的角度来看,虚拟机的兼容性做得非常好,低版本的 Java 字节码完全可以正常运行在高版本的虚拟机上。

整个 JDK 内部结构,可以用如下图来概括(图片来自于廖雪峰的Java介绍)

JDK、JRE 和 JVM 三者之间的关系,可以用如下内容来简要描述。

  • JDK(Java Development Kit):指的是 Java 语言的软件开发工具包,包括编译器、调试器、Java API 类库、Java 虚拟机等内容,通常用于开发环境
  • JRE(Java Runtime Environment):指的是 Java 运行时环境,包括 Java API 类库、Java 虚拟机等内容,通常用于运行 Java 应用程序,通常用于生产环境
  • JVM(Java Virtual Machine):指的是 Java 虚拟机,用于在不同的平台上执行 Java 应用程序

可以清晰的看到,JVM 是 Java 应用程序能实现跨平台运行的核心。因此,了解和学习 JVM 相关的知识,有助于开发者对 Java 相关技术有着更全面的认识。

在操作系统的命令行,输入java -version,即可看到当前 JDK 采用的是哪种版本的虚拟机。

三、虚拟机简介

说起 Java 虚拟机,许多开发者可能首先会想到 HotSpot 虚拟机,正如上文的截图部分。

实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRockit VM、IBM J9 VM等等,虚拟机的发展过程,可以用百花齐放这四个字来概括。

3.1、Sun Classic VM

在 1996 年,Sun 发布 JDK 1.0 时,其中自带的虚拟机就是 Classic VM。这款虚拟机使用的是纯解释器的方式来执行 Java 代码,简单的说就是边解释边运行代码,并非像现在这样通过编译器的方式来执行代码(先编译、后执行)。在 Sun Classic 虚拟机中,解释器与编译器无法共同存在,因此 Java 应用程序执行速度上肯定快不起来,只能说够用。

在 1998 年,Sun 在发布 JDK 1.2 时,同时也公布了一款名为 Exact VM 的虚拟机,这款虚拟机尝试解决了 Classic VM 遇到的所有问题。它的执行系统解决了 Classic VM 存在的解释器和编译器无法同时工作的问题,同时还具备了一些现代高性能处理器的特性,如:两级即时编译、准确式内存管理等。

但可惜的是,这款虚拟机一直没有真正被大规模使用过,此时 Sun Classic VM 依然作为默认的 Java 虚拟机。

3.2、HotSpot VM

在 2000 年,Sun 在发布 JDK 1.3 时,公布将 HotSpot VM 作为默认的 Java 虚拟机,也就是大家广为流传的 Java 虚拟机。

实际上,这个虚拟机并不是由 Sun 公司原生开发的,而是由一个叫 Longview Technologies 公司开发的,Sun 公司注意到了这款虚拟机在 JIT 编译上的许多优秀成果,于 1997 年收购了 Longview Technologies 公司,从而获得了 HotSpot VM 的所有权。

HotSpot VM 不仅仅有前面说到两款虚拟机的优点,也有许多自己的新技术,例如:热点探测技术。热点探测技术指的是通过执行计数器找出最具优化价值的代码,然后通知 JIT 编译器以方法为单位进行深度优化编译。

其实 Exact VM 中也有类似的技术,但最终还是选择了 HotSpot 作为默认的虚拟机。

HotSpot VM 作为默认的 Java 虚拟机之后,直到现在,依然是我们最常用的虚拟机,可见 HotSpot VM 的生命力之顽强!

3.3、BEA JRockit / IBM J9 VM

前面说的是 Sun 公司研发的虚拟机,但除了 Sun 公司之外,其他组织、公司也研发过不少的虚拟机实现,其中最著名的就是 BEA 公司的 JRockit VM 和 IBM 公司的 J9 VM 了。

JRockit VM 是除 HotSpot 之外另一款响当当的虚拟机,BEA 公司在 2002 年收购的了此虚拟机的开发商。这款虚拟机在相当一段时间里获称世界上速度最快的 Java 虚拟机,它是一款专注于服务器端应用的虚拟机,并且它的垃圾收集算法相比其它所有虚拟机表现更佳;此外,其提供的 MissionControl 服务套件也十分强大。

IBM 公司的 J9 VM 则是一款比较通用的虚拟机,其定位应用于从服务端到桌面应用,再到嵌入式的多用途虚拟机。IBM 公司开发 J9 VM 的目的是将其作为 IBM 公司各种 Java 产品的执行平台。稍有不同的是,IBM J9 VM 都只能跟 IBM 产品一起使用,虽然不存在技术限制,但是需要单独的商业许可证。

J9 VM 的性能水平大致跟 HotSpot VM 是一个档次的,在一些场景下,有时 HotSpot VM 快些,有时 J9 VM 快些。

3.4、其它 JVM

HotSpot、JRockit 和 J9 这三个虚拟机,曾经在很长的时间并称三大主流 JVM,可以说是 Java 虚拟机发展史上比较耀眼的部分。除此之外,其实还有各种各样的小范围使用的虚拟机。

例如 Azul VM 和 BEA Liquid VM 的专用商业虚拟机,性能非常强悍,可以管理至少数十个 CPU 和数百 GB 的内存资源,还提供在巨大内存范围内实现可控 GC 时间的垃圾收集器等等,这些虚拟机只运行在特定硬件平台,因此要求也比较高。

此外还有许许多多其他的虚拟机存在,例如:Apache Harmony、Google Android Dalvik VM、Mircosoft JVM 等等,都在各自领域发挥作用。

3.5、Oralce

谁都没想到 Sun 公司技术如此的强大,却在之后的岁月里逐渐走向陨落,因为不懂销售和运营,导致公司财务逐渐出现亏损,在 2009 年,Oracle 公司以现金方式收购 Sun 公司,交易价格达 74 亿美元。

此前,Oracle 公司在 2008 年收购了 BEA 公司,获得了 JRocket VM 的所有权;这意味着 JRockit 与 HotSpot 同属于 Oracle 所有。

实际上,现在 JDK1.8 的 HotSpot VM 已经是以前的 HotSpot VM 与 JRockit VM 的合并版,也就是传说中的“HotRockit”,只是产品里名字还是叫 HotSpot VM。

后续的 JVM 发展,相信会越来越好,我们拭目以待!

四、小结

本文主要围绕 Java 的发展历史,对虚拟机的诞生历史做了一次知识总结,在后续的文章中,我们会对 JVM 相关知识进行总结和分享,如果有描述不对的地方,欢迎大家留言指出,不胜感激!

五、参考

1.https://www.liaoxuefeng.com/wiki/1252599548343744/1255876875896416

2.https://www.cnblogs.com/xrq730/p/4826691.html

3.https://www.cnblogs.com/chanshuyi/p/jvm_serial_02_the_history_of_jvm.html

写到最后

很早之前和小伙伴们分享过 JVM 相关的技术知识,再次感谢大家的支持和反馈。

经过几个月的努力,对 JVM 技术知识进行了重新整理,最后再次献上 JVM系列文章合集索引,感兴趣的小伙伴可以点击查看。

  • JVM系列(一) -什么是虚拟机
  • JVM系列(二) -类的加载过程
  • JVM系列(三) -内存布局详解
  • JVM系列(四) -对象的创建过程
  • JVM系列(五) -对象的内存分配流程
  • JVM系列(六) -运行期优化技术
  • JVM系列(七) -垃圾收集算法
  • JVM系列(八) -垃圾收集器
  • JVM系列(九) -GC日志分析
  • JVM系列(十) -常用调优命令汇总
  • JVM系列(十一) -常用调优工具介绍
  • JVM系列(十二) -常用调优参数总结

最后。如果感觉文章内容不错,帮忙动动小指头点个赞,点赞对我真的非常重要!加个关注我会非常感激!

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

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

相关文章

程序设计基础I-实验7 函数(函数题)

6-1 sdut-C语言实验-计算组合数 计算组合数。C(n,m),表示从n个数中选择m个的组合数。 计算公式如下: 若:m0,C(n,m)1 否则, 若 n1,C(n,m)1 否则,若mn,C(n,m)1 否则 C(n,m) C(n-1,m-1) C(n-1,m…

linux下新增加一块sata硬盘并使用

1)确认新硬盘能被正确识别到 2)对新硬盘进行分区 说明:fdisk指令中输入“m”,可以看到详细的指令含义。 3)确认新创建的分区 5)格式化新创建的分区 6)挂载新分区并使用

网优学习干货:王者荣耀游戏用户体验洞察及质差识别(2)

王者荣耀卡顿特点 影响时延的因素 手游定界定位解决方案 基于“9段法”进行卡顿问题分解 通过数据关联->体验定标->优化提升,改善手游卡顿 无线侧通过“面”和“点”优化改善空口时延 参数及互操作策略优化提升业务感知 传输优化准确定位管道问题——无TWAM…

kafka快速入门系统学习示例

1.主要名词 Broker:消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个或者多个 Broker可以组成⼀个Kafka集群。 partition:通过partition将⼀个topic中的消息分区来存储。这样的好处有多个:分区存储&#xff0…

ArgoWorkflow教程(六)---无缝实现步骤间参数传递

之前我们分析了,Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。 本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递,比如将上一个步骤的输出作为下一个步骤的结果进行使用(而非以文件方式传递)。 1. …

引领零售未来:年销售额500亿的运动品牌如何实现多渠道会员管理?

通过技术创新和全渠道整合,提升运动品牌影响力、用户粘性和市场竞争力。 运动热情高涨持续释放消费潜力,全球知名运动品牌2024财年营收超500亿美元,保持七个季度连续增长。 而随着电商的崛起和消费习惯的变化,会员数量激增且分布…

Android实现ViewPager剧中放大效果

效果图 实现方式核心思想是自定义PageTransformer继承ViewPager.PageTransformer,精确控制每一个page的动效。 PageTransformer的transformPage方法并不会区分当前的page是哪一个,所以需要我们自己去识别,我的方法是每个page添加一个text显…

Nuxt.js 应用中的 page:transition:finish 钩子详解

title: Nuxt.js 应用中的 page:transition:finish 钩子详解 date: 2024/10/10 updated: 2024/10/10 author: cmdragon excerpt: page:transition:finish 是 Nuxt.js 中的一个事件钩子,专门用于处理页面过渡效果结束后的逻辑。这一钩子在页面过渡的 onAfterLeave 事件之后…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl,那么我们就可以直接用了,这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段:创建新的虚拟环境 第一步:查看有多少个虚拟环境 conda env list 第二步:创建一个新的虚拟环境,起个名字:nlpbase 打开anconda prompt终端,输入命令: conda create -n nlpbase python3.10 第三步…

基于xml配置文件的Spring事务

在项目中对事务属性通常传播属性,回滚属性,隔离级别,超时属性都取默认值,只有只读属性会如下的配置: 什么意思:Service层你的类里的方法,以get,find,select等开头的方法是…

如何进行数据中心负载测试的自动化?

数据中心负载测试的自动化是一种通过使用软件工具和脚本来模拟大量用户访问数据中心的过程,以评估其性能、稳定性和可扩展性的方法。以下是进行数据中心负载测试自动化的一些建议: 市场上有许多负载测试工具可供选择,如LoadRunner、JMeter、…

【图论】(二)图论基础与路径问题

图论基础与路径问题 图的构造邻接矩阵邻接表 所有可达路径邻接矩阵存储邻接表存储 字符串接龙有向图的完全可达性 图的构造 这里仅对图论路径问题中图的构造做整理总结归纳,具体详细相关概念请参考代码随想录上的整理总结: 图论理论基础深度优先搜索理…

C语言函数栈帧的创建与销毁(32)

文章目录 前言一、什么是函数栈帧?二、理解函数栈帧能解决什么问题?三、函数栈帧的创建和销毁解析什么是栈?认识相关寄存器和汇编指令 四、解析函数栈帧的创建和销毁预备知识函数的调用堆栈准备环境转到反汇编函数栈帧的创建函数栈帧的销毁 五…

采用反相正基准电压电路的反相运算放大器

1 简介 本设计使用采用反相正基准电压的反相放大器将 –5V 至 –1V 的输入信号转换为 3.3V 至 0.05V 的输出电压。该电路可用于将传感器负输出电压转换为可用的 ADC 输入电压范围。 2 设计目标 2.1 输入 2.2 输出 2.3 电源 3 电路设计 根据设计目标,最终设计的电…

2.1类和对象(上)

本篇博客来梳理类和对象的基础知识 一、类的定义 1.类定义格式 (1)关键字:class。类中的变量称为类的属性/成员变量,类中的函数称为类的方法/成员函数 (2)为区分成员变量,一般会加…

MES管理系统对中小企业有哪些帮助

MES管理系统解决方案对中小企业具有显著的帮助,主要体现在以下几个方面: 一、提升生产效率 MES管理系统能够实时监控生产过程,提供准确的生产数据和及时的反馈。这种实时监控与数据分析能力,使中小企业能够精准把握生产脉搏&…

如何应对动态图片大小变化?Python解决网页图片截图难题

背景介绍 随着互联网的发展,许多网站,尤其是电商平台,如京东(JD.com),为了提升用户体验,采用了许多动态内容加载技术。当我们使用爬虫获取商品图片时,往往会遇到一些棘手问题&#…

中科星图GVE(案例)——AI提取指定采样区域的建筑物范围

目录 简介 函数 gve.Image.fromGeometry(geometry,source,options) gve.Services.AI.buildingExtraction(fromGridRes) 代码 结果 ​编辑 知识星球 机器学习 简介 要提取指定采样区域的建筑物范围,可以使用遥感图像处理和计算机视觉技术。以下是一种可能的…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享14

5.4 软件实现 5.4.1 软件配置管理(掌握) 软件配置管理(SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。 SCM活动的目标就是标识变更、控制变更、确保变更正确 SCM的目的是使错误降为最小&#xff0…