专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

java虚拟机是什么,深入理解java虚拟机

来源:小嗨整编  作者:小嗨  发布时间:2023-03-22 04:23
摘要:java虚拟机是什么,深入理解java虚拟机文章目录一、Java虚拟机是什么二、为什么需要了解Java虚拟机三、JavaJDK的迭代历史四、Java虚拟机发展史与种类五、Java虚拟机规范六、Java虚拟机语言无关性七、Java虚拟机的组成...
  • 2014 年 JDK 8 发布,提供了 Lambda 表达式,并且彻底移除了 HotSpot 的永久代,使用元空间替代。

  • 2017 年 JDK 9 发布,支持 Jigsaw 模块和 Java Shell 等一些新工具,并且 Oracle 宣布每 6 个月发布一个版本,有些版本会被划为长期支持 (LTS) 版,并且只有 LTS 版的 JDK 才能够获得为期 3 年的支持和更新,普通版的 JDK 就只有短短六个月的生命周期。JDK 8、JDK 11 和 JDK 17 属于最近的 LTS 版。

  • 2018 年 3 月 JDK 10 发布,这版本的主要研发目标是内部重构,诸如统一源仓库、统一垃圾收集器接口、统一即时编译器接口。

  • 2018 年 9 月 JDK 11 发布,该版本是一个 TLS 版本,提供了新的 ZGC 垃圾收集器。

  • 2019 年 3 月 JDK 12 发布,改进了 Switch 表达式,并且提供了新的 Shenandoah 垃圾收集器。

  • 2019 年 9 月 JDK 13 发布,继续改进了 Switch 表达式,并且对现有的字符串文本进行了优化,提供了"""xxxx"""这种文本块用法等。

  • 2020 年 3 月 JDK 14 发布,确定了 Switch 表达式,新增了 instanceof 模式匹配和记录类型 (record),并且删除了 CMS 垃圾回收器。

  • 2020 年 9 月 JDK 15 发布,新增了封闭类、隐藏类,并且准备禁用和废除偏向锁,优化了集合,以及标记 ZGC 和 Shenandoah 可以在生产环境使用。

  • 2021 年 3 月 JDK 16 发布,确定了 record 和 instanceof 模式匹配等功能,提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。

  • 2022 年 9 月 JDK 17 发布,该版本是一个 TLS 版本,增强 TreeMap,弃用 Socket 实现工厂机制,新增 javadoc 工具,统一日志支持异步日志刷新等。

java虚拟机是什么,深入理解java虚拟机

四、Java 虚拟机发展史与种类

我们再看一下 Java 虚拟机的发展史,以及都有哪些比较知名的虚拟机(资料收集于网络):

① Sun Classic VM

1996 年 1 月,Sun 公司发布 JDK 1.0 版本,这时支持 Java 语言运行的就是 Classic VM。

Classic VM 只能使用纯解释执行的方式来运行 Java 代码,执行效率非常差,与传统的 C/C++ 程序执行效率有很大差距,也正是这个时期给大众留下了 "Java 语言很慢" 这种印象。

② Sun Exact VM

在 JDK 1.2 版本时,Sun 团队曾在 Solaris 平台上发布过一款名为 Exact VM 的虚拟机,该虚拟机解决了 Classic VM 中许多的问题,提升了 Java 应用的整体的运行效率。

Exact VM 使用准确式内存管理 (Exact Memory Management) 而得名,该技术实现了虚拟机可以区分内存中某个位置的数据具体是什么类型,减少了每次定位对象间接查找的开销,提升执行性能。并且 Exact VM 执行系统已经具备现代高性能虚拟机的雏形,比如支持两级即时编译器、编译器与解释器混合工作模式等,具备现代高性能虚拟机的维形。

③ Sun HotSpot VM

在 JDK 1.3 版本时,Sun 将默认的虚拟机从 Classic VM 替换为了 HotSpot VM,该虚拟机的使用已经延伸到了现在,也是目前来说使用范围最广的虚拟机。不过,HotSpot VM 在最初并非由 Sun 公司开发,而是由 Longview Technologies 公司设计,Sun 公司注意到了这款虚拟机在 JIT 编译上有许多优秀的理念和实际效果,在 1997 年收购了 Longview Technologies 公司,从而获得了 HotSpot VM。

HotSpot VM 既继承了 Sun 之前两款商用虚拟机的优点,也有许多自己新的技术优势。如热点代码探测技术,可以通过执行计数器找出最具有编译价值的代码,然后通知 JIT 编译器以方法为单位进行编译。

在 2006 年的 JavaOne 大会上,Sun 公司宣布将 Java 进行开源,其中也包括了 HotSpot VM (基于GPL协议),并在此基础上建立了 OpenJDK。不过在 2009 年 Oracle 收购 Sun 公司,并极力的对 HotSpot VM 进行改造,使其性能更优。

当下我们提及 Java 虚拟机时,大多数指的都是 HotSpot 虚拟机,因此深入了解 HotSpot 虚拟机,对我们开发者来说是非常有必要的。

其它虚拟机

除了 Sun 公司以外,其他组织/公司也研发过不少虚拟机的实现,比如:

  • JRockit: BEA System 公司的 JRockit,BEA 公司后来被 Oracle 公司收购,JRockit 虚拟机也不再继续发展。

  • OpenJ9: IBM 公司的 J9,后来开源捐献给了 Eclipse 基金会,更名为 OpenJ9。

  • ...

五、Java 虚拟机规范

Java 虚拟机规范根据名字就知道,它是一种 Java 虚拟机实现的规范,也可以说它是一种约定,需要实现 Java 虚拟机的开发者们共同遵守并维护。

简而言之就是说,Java 虚拟机规范约定了 Java 虚拟机中要实现的大致功能,但是 Java 虚拟机规范中并没有规划具体实现的细节,这些实现细节部分将留给开发者们来实现。这就好比我们 Java 开发中的抽象类,抽象类中定义了抽象方法,开发者们只需要实现这些抽象方法就能实现具体的功能。所以,抽象方法的定义者并不关心这些抽象方法实现的细节,只要求实现这些抽象方法即可。

实际上,在 Java 虚拟机规范中规定了虚拟机组成结构、字节码文件结构、虚拟机编译器、加载类的阶段、异常、以及字节码指令集等内容,没有细节和具体功能的描述。

我们只要浏览一遍 Java 虚拟机规范,才能对其内容有所了解,这里给出 Oracle 官网的 Java 虚拟机规范地址,如下:

  • Oracle Java 虚拟机规范: https://docs.oracle.com/javase/specs/index.html

感兴趣的朋友可以自行查看,相信可以加强你对 Java 虚拟机整体设计的认知。

六、Java 虚拟机语言无关性

在正常情况下,我们肯定会认为 Java 虚拟机是用于运行 Java 语言的,其实这么说并不能说是错误,但是也不完全对,这是因为 Java 虚拟机实际上运行的是特定的二进制字节码文件。实际上 Java 虚拟机和某种语言并没有必然的关联,因为不管什么语言只要能够编译成字节码文件,并符合 Java 虚拟机规范,那么 Java 虚拟机就可以加载该字节码文件,并且执行字节码文件中的指令。

JVM 支持的语言: Clojure、JRuby、Groovy、Scala、JavaScript、Kotlin、...

java虚拟机是什么,深入理解java虚拟机

因此,每种语言只要编译成符合 Java 虚拟机规范的字节码文件,就可以使用 Java 虚拟机运行指定语言的代码。


本文地址:IT问答频道 https://www.eeeoo.cn/itwenda/936272_2.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


IT问答
小编:小嗨整编
相关文章相关阅读
  • javascript教程网(javascript教程推荐)

    javascript教程网(javascript教程推荐)

    javascript教程网(javascript教程推荐)JavaScript作为一种广泛应用于网页开发的技术,已经成为前端开发不可或缺的一部分。对于刚接触编程的菜鸟来说,选择一份合适的JavaScript教程至关重要。本文将为您推荐几款优...

  • java软件叫什么(java软件安装教程详细)?

    java软件叫什么(java软件安装教程详细)?

    java软件叫什么(java软件安装教程详细)?Java语言是由美国Sun(StanfordUniversityNetwork)公司在1995年推出的,2009年Oracle甲骨文公司收购了Sun公司,如果想开发一个全新的Java程序,必须...

  • 我的世界java版官网(我的世界java版怎么下载)?

    我的世界java版官网(我的世界java版怎么下载)?

    我的世界java版官网(我的世界java版怎么下载)?我的世界java版早在2011年就已发布,而当时的中文补丁使许多人并未购买正版。而如今的网易版让许多人觉得没有童年的味道,那么如何下载java版呢?我的世界java版官网:minecra...

  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • Java 中的各种锁有哪些?

    Java 中的各种锁有哪些?

      Java中15种锁的介绍  在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:  公平锁/非公平锁  可重入锁/不可重入锁  独享锁/共享锁  互斥锁/读写锁  乐观锁...

  • Java中的Scanner操作详解

    Java中的Scanner操作详解

    scanner是java中的一个常用类,用来读取控制台或文件中的输入数据。它提供了一种简单的方式来解析基本类型和字符串,并支持对正则表达式进行匹配。Scanner类位于java.util包中,因此在编写程序时需要import...

  • java8新特性有哪些

    java8新特性有哪些

    java8新特性有:1、lambda表达式;2、方法引用;3、默认方法;4、新编译工具;5、streamapi;6、datetimeapi;7、option;8、nashornjavascript引擎。Java8新增了非常多的特性...

  • java中tostring方法的作用是什么

    java中tostring方法的作用是什么

    java中tostring方法的作用是会返回一个【以文本方式表示】此对象的字符串,结果是一个简明但易于读懂的信息表达式。java中tostring方法的作用是toString方法会返回一个“以文本方式表示”此对象的字符串。结果是一个简明但易...

  • 周排行
  • 月排行
  • 年排行

精彩推荐