JVM系列.历史上出现过的Java虚拟机
HotSpot绝对是当今商用虚拟机的王者,但是在Java历史上出现过很多Java虚拟机,这篇文章就来整理下历史上出现过的Java虚拟机以及他们的特性。
Sun Classic
Sun Classic虚拟机是JDK 1.0默认的虚拟机。但是这个虚拟机不带即时编译技术,性能稍差。Classic虚拟机在JDK 1.2之前是JDK中唯一的虚拟机,在JDK 1.2时,它与HotSpot VM并存,但默认是使用ClassicVM(用户可用java-hotspot参数切换至HotSpot VM),而在JDK 1.3时,HotSpot
成为默认虚拟机,它仍作为虚拟机的“备用选择”发布(使用java-classic参数切换),直到JDK 1.4的时候,Classic VM才完全退出商用虚拟机的历史舞台,进入了Sun LabsResearch VM之中。
可以说Sun Classic虚拟机是Java商用虚拟机的鼻祖。
HotSpot VM
相信所有Java程序员都听说过HotSpot虚拟机,它是Sun/OracleJDK和OpenJDK中的默认Java虚拟机,也是目前使用范围最广的Java虚拟机。
HotSpot虚拟机是Sun公司收购的项目,具有现代虚拟机的高级特性,比如它的名字中所说的:热点代码探测技术。
Mobile/Embedded VM
专门针对移动设备或者嵌入式设备的虚拟机。
JRockit和IBM J9
BEA System公司的JRockit,BEA公司后来被Oracle公司收购,JRockit虚拟机也不再继续发展。
IBM公司的J9。后来开源捐献给了Eclipse基金会,更名为OpenJ9。
这两款虚拟机可以说是虚拟机界的老二。
Liquid
Liquid也是BEA System公司开发的虚拟机,和HotSpot、JRockit等虚拟机项目不同,Liquid是针对特定硬件平台的虚拟机,而不是通用平台的虚拟机。
随着BEA被Sun收购,Liquid项目也已经停止开发。
Graal虚拟机
2018年4月,Oracle Labs新公开了一项黑科技:Graal VM,从它的口号“Run Programs Faster Anywhere”就能感觉到一颗蓬勃的野心,这句话显然是与1995年Java刚诞生时的“Write Once,Run Anywhere”在遥相呼应。
Graal VM被官方称为“Universal VM”和“Polyglot VM”,这是一个在HotSpot虚拟机基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言”的运行平台使用,这里“任何语言”包括了Java、Scala、Groovy、Kotlin等基于Java虚拟机之上的语言,还包括了C、C++、Rust等基于LLVM的语言,同时支持其他像JavaScript、Ruby、Python和R语言等。Graal VM可以无额外开销地混合使用这些编程语言,支持不同语言中混用对方的接口和对象,也能够支持这些语言使用已经编写好的本地库文件。
Graal VM的基本工作原理是将这些语言的源代码(例如JavaScript)或源代码编译后的中间格式(例如LLVM字节码)通过解释器转换为能被Graal VM接受的中间表示(Intermediate Representation,IR),譬如设计一个解释器专门对LLVM输出的字节码进行转换来支持C和C++语言,这个过程称为程序特化(Specialized,也常被称为Partial Evaluation)。Graal VM提供了Truffle工具集来快速构建面向一种新语言的解释器,并用它构建了一个称为Sulong的高性能LLVM字节码解释器。
对Java而言,Graal VM本来就是在HotSpot基础上诞生的,天生就可作为一套完整的符合Java SE 8标准的Java虚拟机来使用。它和标准的HotSpot的差异主要在即时编译器上,其执行效率、编译质量目前与标准版的HotSpot相比也是互有胜负。但现在Oracle Labs和美国大学里面的研究院所做的最新即时编译技术的研究全部都迁移至基于Graal VM之上进行了,其发展潜力令人期待。如果Java语言或者HotSpot虚拟机真的有被取代的一天,那从现在看来Graal VM是希望最大的一个候选项,这场革命很可能会在Java使用者没有明显感觉的情况下悄然而来,Java世界所有的软件生态都没有发生丝毫变化,但天下第一的位置已经悄然更迭。
相关文章
- java中数组转列表_Java数组转list
- java mediatype utf-8_Java MediaType.APPLICATION_JSON_UTF8屬性代碼示例
- 深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解
- Java连接MySQL mysql-connector-java-bin.jar驱动包的下载与安装
- 学java用什么编译器_学习Java用什么编译软件好
- java反转数组_Java实现数组反转翻转的方法实例
- java启动器_JAVA基础:Java 启动器如何查找类
- java有什么作用_Java有什么用「建议收藏」
- java webservice实现_JAVA WebService的实现方式
- 精选30道Java笔试题解答
- java mutator,Java – 使用Accessor和Mutator方法「建议收藏」
- idea搭建javaweb环境_java怎么打开项目
- Java虚拟机(JVM)面试题
- 【Java百炼成神】魂力篇——Java之变量
- java服装销售系统ssm
- Java面试集锦(一)之Jvm(虚拟机)
- java解释器虚拟机-Java代码如何运行在Java虚拟机中
- 【愚公系列】2023年03月 Java教学课程 090-Servlet服务器的Response
- Java 通过 BigDecimal 实现数值四舍五入详解编程语言
- 如何使用Java连接MySQL数据库(java怎么连接mysql数据库)
- Java 与 Linux 的结合:开启新时代(java和linux)
- java sql: PrepareStatement详解编程语言
- Java虚拟机(JVM)及Java跨平台原理
- MySQL数据库开发实践:用 Java 开发中文应用(mysql中文java)
- Linux下安装Java的简易步骤(linux如何安装java)
- 缓存Redis与Java结合实现高效过期缓存(redisjava过期)
- 数据清理基于Redis和Java的过期数据清理策略.(redisjava过期)
- 时间解决Java中Redis过期时间问题(redisjava过期)
- Java神器:集成Redis,提高效率!(java集成redis)
- Java与Linux:前景迷人的新科技(java和linux前景)
- 期Java开发高效配置MySQL长期支撑(mysql java 长)
- 版本Linux查看Java版本的简单方法(linux 查看java)
- Java工程师集MySQL技能于一身(java工程师mysql)
- 数据库以Java运行环境构建基于Oracle的数据库(java创建oracle)