[转帖] JVM虚拟机的历史
Java虚拟机发展史
https://blog.csdn.net/tinyDolphin/article/details/72809018
如何查看自己的虚拟机版本?
Sun Classic / Exact VM
Sun HotSpot VM
Sun Mobile-Embedded VM / Meta-Circular VM
BEA JRockit / IBM J9 VM
Azul VM / BEA Liquid VM
Apache Harmony / Google Android Dalvik VM
Microsoft JVM 及其他
1、如何查看自己的虚拟机版本?
控制台输入:java -version,即可查看。
2、Sun Classic / Exact VM
Sun Classic:
世界上第一款商用 Java 虚拟机;
只能使用纯解释器方式来执行 Java 代码,也可以使用外挂JIT编译器,JIT 会完全接管虚拟机的执行系统,但是此时解释器不会再工作了;
JDK1.2之前是 Sun JDK 中唯一的虚拟机,JDK1.4 时,完全退出商用虚拟机的历史舞台,与 Exact VM 一起进入了Sun Labs Research VM。
Exact VM:
它的执行系统已经具备了现代高性能虚拟机的雏形:如两级即时编译器、编译器与解析器混合工作模式等;
使用准确式内存管理:虚拟机可以知道内存中某个位置的数据具体是什么类型。
有与 HotSpot 几乎一样的热点探测;
在商业应用上只存在了很短暂的时间就被更优秀的 HotSpot VM 所取代。
3、Sun HotSpot VM
它是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机;
继承了 Sun 之前两款商用虚拟机的优点(如准确式内存管理),也使用了许多自己新的技术优势,如热点代码探测技术(通过执行计数器找出最具有编译价值的代码,然后通知 JIT 编译器以方法为单位进行编译);
Oracle 公司分别收购了 BEA 和 Sun,并在 JDK8 的时候,整合了 JRokit VM 和 HotSpot VM,如使用了 JRokit 的垃圾回收器与 MissionControl 服务,使用了 HotSpot 的 JIT 编译器与混合的运行时系统。
4、Sun Mobile-Embedded VM / Meta-Circular VM
KVM:在 Android、IOS 等智能手机操作系统出现前,曾在手机平台上得到非常广泛的应用。
CDC / CLDC HotSpot Implementation:整个Java ME 的重要支柱,但是在 Android 和 IOS 二分天下的移动数字设备市场看来,其面临的局面不容乐观。
Squawk VM:运行于 Sun SPOT(一种手持的WiFi设备),也曾运用于 Java Card,是一个 Java 代码比重很高的嵌入式虚拟机实现。
JavaInJava:一个实验室性质的虚拟机,试图以 Java 语言来实现 Java 语言本身的运行环境。它必须运行在另外一个宿主虚拟机之上,内部没有 JIT 编译器,代码只能以解析模式执行。
Maxine VM:与 JavaInJava 非常相似,它有着先进的 JIT 编译器和垃圾收集器(但没有解析器),可在宿主模式或独立模式下执行,其执行效率已经接近了 HotSpot Client VM 的水平。
5、BEA JRockit / IBM J9 VM
JRockit VM:
号称“世界上速度最快的 Java 虚拟机”(广告词);
一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,由于专注于服务器端应用,可以不太关注程序启动速度,因此 JRockit 内部不包含解析器实现,全部代码靠即时编译器编译后执行,除此之外,JRockit 的垃圾收集器和 MissionControl 服务套件等部分的实现,在众多 Java 虚拟机中也一直处于领先水平。
IBM J9 VM:
市场定位与 Sun HotSpot 比较接近,是一款设计上从服务器端到桌面应用再到嵌入式都全面考虑的多用途虚拟机;
其开发的目的:作为 IBM 公司各种 Java 产品的执行平台。
6、Azul VM / BEA Liquid VM
我们平时所说的“高性能 Java 虚拟机”一般是指 HotSpot、JRockit、J9 这类在通用平台上运行的商用虚拟机,但其实 Azul VM 和 BEA Liquid VM 这类特定硬件平台专有的虚拟机才是“高性能”的武器。
Azul VM: 是在 HotSpot 基础上进行大量改进,运行于 Azul Systems 公司的专有硬件 Vega 系统上的 Java 虚拟机,每个 Azul VM 实例都可以管理至少数十个 CPU 和数百 GB 内存的硬件资源,并提供在巨大范文内实现可控的 GC 时间的垃圾收集器、为专有硬件优化的线程调度等优秀特性;
Liquid VM:
即是现在的 JRockit VE(Virtual Edition),是 BEA 公司开发的,可以直接运行在自家的 Hypervisor 系统上的 Jrockit VM 的虚拟化版本。
它不需要操作系统的支持,或者说它自己本身实现了一个专有操作系统的必要功能,如文件系统、网络支持等。
由虚拟机越过通用操作系统直接控制硬件可以获得很多好处,如在线程调度时,不需要再进行核态/用户态的切换等,这样可以最大限度的发挥硬件的能力,提升 Java 程序的执行性能。
7、Apache Harmony / Google Android Dalvik VM
它们只能称为“虚拟机”,而不能称为“Java 虚拟机”。
Apache Harmony:是一个 Apache 软件基金会旗下以 Apache License 协议开源的实际兼容于 JDK1.5 和 JDK1.6 的 Java 程序运行平台。
Dalvik VM:
是 Android 平台的核心组成部分之一。
没有遵循 Java 虚拟机规范,不能直接执行 Java 的 Class 文件,使用的是寄存器架构而不是 JVM 中常见的栈架构。
它执行的 dex(Dalvik Executable)文件可以通过 Class 文件转化而来。
8、Microsoft JVM 及其他
Microsoft JVM:微软公司为了在 IE3 中支持 Java Applets 应用而开发了自己的 Java 虚拟机,虽然这款虚拟机只有 Windows 平台的版本,却是当时 Windows 下性能最好的 Java 虚拟机。
其他:JamVM、cacaovm、SableVM、Kaffe、Jelatine JVM、Nano VM、MRP、Moxie JVM、Jikes RVM。
---------------------
作者:TinyDolphin
来源:CSDN
原文:https://blog.csdn.net/tinyDolphin/article/details/72809018?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
[转帖] JVM虚拟机的历史的更多相关文章
- JVM基础系列第2讲:Java 虚拟机的历史
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...
- [转帖]java架构之路-(面试篇)JVM虚拟机面试大全
java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html 下文连接比较多啊,都是我过整理的博客,很多答案都 ...
- JVM虚拟机深入理解+GC回收+类加载
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81455449 一,前言 本文章是读了“深入理 ...
- 今天是JVM的生日,来了解下JVM的发展历史吧
1991年4月,由James Gosling主导的团队创造了Oak语言,java的前身,1995年5月23号,Oak语言更名Java,并且提出那句注明的:”write Once,Run Anywher ...
- 《深入理解JVM虚拟机》读书笔记
前言:<深入理解JVM虚拟机>是JAVA的经典著作之一,因为内容更偏向底层,所以之前一直没有好好的阅读过.最近因为刚好有空,又有了新目标.所以打算和<构架师的12项修炼>一起看 ...
- jvm虚拟机栈的作用
jvm虚拟机栈的作用 jvm虚拟机栈栈帧的组成 jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成 局部变量表-存储方法参数,内部使用的变量 操作数栈-在变量进行存储时,需 ...
- 五分钟学Java:如何学习Java面试必考的JVM虚拟机
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...
- JVM虚拟机知识问答总结(简单复习,快速回忆!)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 设置TOMCAT的JVM虚拟机内存大小
你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...
随机推荐
- JS字符串补全方法padStart()和padEnd()
背景: var t = new Date().getMonth() + 1; // t ===> 7,没有0,怎么展示成下面的样子? // 2018-07-23 解决上述问题的一个思路: // ...
- 第一次玩github,第一个开源小项目——xxoo
引言 由于最近的工作写代码比较少,这让LZ产生了一丝危机感.于是便想找一个办法可以没事自己写写代码,自然而然就想到了github.接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号, ...
- 流行创意风格教师求职简历免费word模板
18款流行创意风格教师求职简历免费word模板,也可用于其他专业和职业,个人免费简历模板,个人简历表免费,个人简历表格. 声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 下载地址:百度网 ...
- 1.21 贪心入门上午PAT例题题解
1.B1023 #include<cstdio> int a[10]; int main() { for(int i=0;i<=9;i++) { scanf("%d&quo ...
- Python 3 利用 Dlib 19.7 进行人脸检测
0. 引言 / Overview 介绍 Dlib 中基于 HOG,Histogram of Oriented Gradients / 方向梯度直方图 实现 Face Detect / 人脸检测 的两个 ...
- 什么是mvc模式
MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开.将一个应用程序分为三个部分:Model,View,Controller. 原理图: 分析: Model 模型(完成 ...
- node child_process模块
NodeJs是一个单进程的语言,不能像Java那样可以创建多线程来并发执行.当然在大部分情况下,NodeJs是不需要并发执行的,因为它是事件驱动性永不阻塞.但单进程也有个问题就是不能充分利用CPU的多 ...
- SpringBoot集成dubbo实例
项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...
- Vue实现双向绑定的原理以及响应式数据
一.vue中的响应式属性 Vue中的数据实现响应式绑定 1.对象实现响应式: 是在初始化的时候利用definePrototype的定义set和get过滤器,在进行组件模板编译时实现water的监听搜集 ...
- max number of clients reached Redis测试环境报错
现象:测试服务是去redis循环取数据,早上发现服务挂了,手动登陆redis 无法输入命令,报错:max number of clients reached Redis