- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
众所周知,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 三者之间的关系,可以用如下内容来简要描述.
可以清晰的看到,JVM 是 Java 应用程序能实现跨平台运行的核心。因此,了解和学习 JVM 相关的知识,有助于开发者对 Java 相关技术有着更全面的认识.
在操作系统的命令行,输入java -version,即可看到当前 JDK 采用的是哪种版本的虚拟机.
说起 Java 虚拟机,许多开发者可能首先会想到 HotSpot 虚拟机,正如上文的截图部分.
实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRockit VM、IBM J9 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 虚拟机.
在 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 的生命力之顽强! 。
前面说的是 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 快些.
HotSpot、JRockit 和 J9 这三个虚拟机,曾经在很长的时间并称三大主流 JVM,可以说是 Java 虚拟机发展史上比较耀眼的部分。除此之外,其实还有各种各样的小范围使用的虚拟机.
例如 Azul VM 和 BEA Liquid VM 的专用商业虚拟机,性能非常强悍,可以管理至少数十个 CPU 和数百 GB 的内存资源,还提供在巨大内存范围内实现可控 GC 时间的垃圾收集器等等,这些虚拟机只运行在特定硬件平台,因此要求也比较高.
此外还有许许多多其他的虚拟机存在,例如:Apache Harmony、Google Android Dalvik VM、Mircosoft JVM 等等,都在各自领域发挥作用.
谁都没想到 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系列(一)-浅谈虚拟机的成长史的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在尝试弄清VMware是如何工作的(特别是在安装Linux时),我有两个问题: 当VMware遇到push cs这样的命令时会发生什么?特别是cs,因为其特权级别为0,而VMware以1特权级别
我正在尝试将 vim 配置为我的主要编码程序。我已经想出了如何编译单个文件,但是当我从 vim 中执行程序时,我不断收到 127 错误代码。我的盒子上有 a 别名为 ./a.out,但是当我从 vim
我正在尝试将 vim 配置为我的主要编码程序。我已经想出了如何编译单个文件,但是当我从 vim 中执行程序时,我不断收到 127 错误代码。我的盒子上有 a 别名为 ./a.out,但是当我从 vim
想知道有没有什么javascript虚拟机是你用过的或者有什么想法的! 我不是在谈论用于 chrome 的 V8 等浏览器的 javascript 引擎,我想在 linux 服务器机器上执行 java
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
我正在查找 Azure 中存储帐户的用途。因为我有一个问题。 我的帐户仅限于 1 个存储帐户,显然我已经在使用它,但我不知道为什么,我认为我不需要它。 我有一台带有云服务和存储帐户的虚拟机。我想创建另
Error - JVM - BlackBerry 9800 Simulator --------------------------------------- JVM: could not open
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
这是我的情况 我需要配置linux系统,因为路由器和客户端也在虚拟机中.. 系统A eth0:从isp获取ip(在VM ware中配置为Bidge) eth1: DEVICE=eth1 BOOTPRO
我知道 BEA 正在开发不需要底层操作系统的 LiquidVM,但想知道开源社区中是否有人正在开发类似的东西。 理想情况下,我想找到一个实现,其中 VM 直接由操作系统引导加载程序加载。 最佳答案 与
Linux系统下安装Vmware教程 由于项目需要,要在Linux下虚拟一个Windows,经过查找些资料,发现可一用VMware来实现,当然还有其他一些虚拟机可以使用如Win4lin,bochs
我正在使用虚拟机进行开发,但是每次我需要一个新的 VM 时,我都会复制文件并创建一个新服务器,但是我需要一个新的服务器名称才能将其添加到我们的网络中。 重命名服务器后,Sharepoint 站点有很多
如果 Cassandra 和代码在同一台机器上,则以下代码有效: using System; using Cassandra; namespace CassandraInsertTest {
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 Improve this qu
我正在将我的 Web 应用程序 try catch 异常错误跟踪消息转储到 Web 服务器上的 C:\Temp 文件夹但是当我的 web 应用程序位于 azure 上时,我希望在 azure VM c
我们为客户提供桌面 ERP 软件。该软件安装在 Azure 虚拟机中。每个公司都有自己的数据库文件。我需要优化性能,但我有些怀疑无法找到回应。例如,对于 2 个公司: 1-购买 2 台小型 VM(2
我试图将 Azure 上的虚拟机的网络号地址更改为与 Azure 池上的另一个虚拟机位于同一网络中,一旦我单击网卡上的“保存”,它就会卡住并无法通过远程桌面或任何其他方式。 请帮忙。 最佳答案 切勿尝
是否可以在 Azure 上设置虚拟机并使该虚拟机的同一实例对多个用户可见? 我们是 ISV。我们的用户分散在全局。我们希望使用 Azure 虚拟机来指导用户设置我们的软件。理想情况下,我们的帮助台将在
我使用 Ubuntu 镜像创建了一个虚拟机,并从 Azure 库预加载了 Discourse。自动设置完成后,我可以看到虚拟机正在运行,但我无法连接到它以远程查看计算机。我没有看到任何设置可以为我解决
我是一名优秀的程序员,十分优秀!