[转帖] 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都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...
随机推荐
- Python_sklearn机器学习库学习笔记(四)decision_tree(决策树)
# 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...
- UWP 检测网络状态
最近发现Community Toolkit有了网络辅助类,貌似很早就有了... 很不错,还是用.给大家分享一下. 1. 检测网络是否可用 2. 检测网络是否是计费模式? 3. 检测网络接入类型 4. ...
- windows下安装Mongodb_4.0.6最新版及常用命令
今天下载了最新版Mongodb进行安装,发现相比较于以前,方便了很多,直接下载: 一.下载地址:https://www.mongodb.com/download-center/enterprise 二 ...
- implode函数的升级版,将一个多维数组的值转化为字符串
/** * implode函数的升级版 * 将一个多维数组的值转化为字符串 * @param $glue * @param $data * @return string */function mult ...
- EventBus的基本使用步骤
为什么要使用EventBus 当我们进行项目开发的时候,往往是需要应用程序的各组件间进行通信,比如在子线程中进行请求数据,当数据请求完毕后通过Handler或者是广播通知UI, 通常两个Activit ...
- 百道Python入门级练习题(新手友好)第一回合——矩阵乘法
题目描述 [问题描述] 编写程序,完成3*4矩阵和4*3整数矩阵的乘法,输出结果矩阵. [输入形式] 一行,供24个整数.以先行后列顺序输入第一个矩阵,而后输入第二个矩阵. [输出形式] 先行后列顺序 ...
- MyCat安装与测试教程 超详细!
MyCat安装与测试教程 超详细! MyCat基础知识 一.什么是MYCAT? 1. 一个彻底开源的,面向企业应用开发的大数据库集群 2. 支持事务.ACID.可以替代MySQL的加强版数据库 3. ...
- sqli-labs学习笔记 DAY5
DAY 5 sqli-labs lesson 26a 闭合符号为单引号和括号,并且不回显错误,如果服务器是Linux,尝试%a0代替空格,这里尝试使用布尔型 数据库名长度:?id=1')&&a ...
- Sentence | Never underestimate yourself.
"\(Our\) \(deepest\) \(fear\) \(is\) \(not\) \(that\) \(we\) \(are\) $inadequate. $ \(Our\) \(d ...
- ubuntu下import matplotlib错误解决办法
环境:ubuntu16.04,python2.7,tensorflow1.4.0 问题: ImportError: No moudule named _tkinter, please install ...