1. Sun Classic VM 

  jdk1.0  第一款商用虚拟机。

  只能使用纯解释器来运行Java代码。没有自己的判断,会把每一个方法每一行代码都编译,效率不好。导致大家普遍认为Java代码运行效率比较慢。

  使用jit编译器的话 需要外挂完全接管虚拟机的执行系统,解释器不再工作。 (Why use jit ?)

2. Exact VM

jdk1.2  只在Solaris上发布了

Exact Memory Management 准确式子内存管理

即:虚拟机可以知道内存中某个位置的数据具体是什么类型的。

eg:一个整数类型数据,到底是引用类型的数值地址呢?还是直接存了这个数值的整数?知道这个之后,进行垃圾回收的时候,就可以判断堆上的数据是否还能被使用

  可以抛弃classic VM 基于handler的查找方式,那么虚拟机的性能较classic VM有一个很大的提高。有了高性能虚拟机的雏形。编译器和解释器混合工作以及两

  级即时编译器。

英雄气短,还没来得及在windows和linux上发布,就被Hot Spot取代了。jdk1.2 在windows 和linux 上依然是classicVM

3.Hot Spot VM 

参考:《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》
http://book.2cto.com/201306/25426.html
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。
但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;
甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,
而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,
Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。 HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势,
如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,
而Exact VM之中也有与HotSpot几乎一样的热点探测。
为了Exact VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利),
HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。
如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。
通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,
即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。 在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,
并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。 在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。
Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。
整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务,
使用HotSpot的JIT编译器与混合的运行时系统。

4.KVM

  • kilobyte 简单、轻量、高度可移植、运行速度慢,是一款嵌入式虚拟机。 (j2ME使用)
  • 在手机平台运行

5、JRockit

  • BEA 公司研发   (BEA公司 2008年被Oracle收购)
  • 世界上最快的虚拟机
  • 专注服务器端的应用(不太关心程序的启动速度,内部不包含解释器的实现,全部代码都靠即时编译器编译后执行,所以性能高)
  • 优势:
  1. 垃圾收集器
    1. Mission Controle服务套件(用来诊断内存泄露并指出根本原因)

 6、J9

IBM Technology for java virtual Machine (IT4j)

与Hot Spot 类似,从服务器端,到桌面应用,再到嵌入式,全部都考虑了,

7、Dalvik (安卓)

是冰岛的一个小渔村的名字。

并不是一个Java虚拟机,因为并不遵循Java虚拟机的规范,是不能直接执行编译后的.class文件。

使用的是寄存器架构,而不是Java VM 所使用的栈架构。它执行的是 .dex(dalvik Execuable)文件。

8、Microsoft JVM

只能运行在windows 平台上,当时是windows上运行效率最快的。

97 Sun 以此告微软,微软败诉,赔偿大概10亿美元作用。并停止开发和使用此虚拟机,就此夭折。所以现在windows 系统上并没有自带的虚拟机,都需要自己安装并配置环境变量。

9、Azul VM 

  是Azul system 公司 在Hot Spot基础上进行的改进,是运行在其公司专有的硬件上,一个Azul VM 实例,都可以管理数十个CPU以及数百G的内存资源,而且通过巨大内存范围内,实现可控的GC事件以及垃圾回收。

10、 Liquid VM

BEA 公司的一个产品。更加强大,不需要操作系统的支持,它自己就是一个操作系统。说Java慢,是因为它先经过一层Java VM,然后虚拟机来调用OS,多了一部。而Liquid VM本身就不需要OS的支持,它自己就已经实现了File System,网络支持等等这些必要的功能,本身就相当与一个OS。所以性能和速度都是相当强大的。

11、TaobaoVM 

淘宝公司根据HotSpot 深度定制的产品。对硬件依赖比较高,eg : 只能使用Intel的CPU,损失了兼容性,但是提高了性能。在JNI(Java Native Interface)调用时,能够降低进程的开销。

【三】Java VM 发展史的更多相关文章

  1. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

  2. 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好

    https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...

  3. java vm args

    这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的.第一次出现这样的的问题以后,引发了其他的问题.在网上一查可能是JAVA的堆栈 ...

  4. Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

  5. 《深入理解Java虚拟机》(一)Java虚拟机发展史

    Java虚拟机发展史 1.Sun Classic/Exact VM 1.Sun Classic:世界第一款商用Java虚拟机. 2.Exact VM:准确式GC:虚拟机可以知道内存中的某个位置的数据具 ...

  6. Java EE发展史

    前言 最近的这段时间一直在学习Java EE,刚刚完成了从0到1的蜕变,所以顺便整理一下我所了解到的Java EE,给刚入门学习的新人一些头绪,而所谓“启示录”,就是这个意思. 一.Java EE是什 ...

  7. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  8. JavaSE复习~Java语言发展史

    Java概述 什么是Java语言? Java语言是美国Sun公司(Stanford University NetWork),在1995年推出的高级编程语言. 所谓编程语言,是计算机的语言,人们可以使用 ...

  9. JAVA日志发展史

    JAVA日志发展史 第一阶段 2001年以前,Java是没有日志库的,打印日志全凭System.out和System.err 缺点: 产生大量的IO操作同时在生产环境中无法合理的控制是否需要输出 输出 ...

随机推荐

  1. POJ-3687 Labeling Balls(拓扑)

    不一样的拓扑排序 给定一些标记为1到n的数, 求出满足a < b 的序列, 如果有多个输出, 按先标签1往前的位置, 然后按标签2往前的位置, 对于每个标签, 位置都尽量往前. 因为位置要往前, ...

  2. [WC2008]游览计划(状压dp)

    题面太鬼畜不粘了. 题意就是给一张n*m的网格图,每个点有点权,有k个关键点,让你把这k个关键点连成一个联通快的最小代价. 题解 这题nmk都非常小,解法肯定是状压,比较一般的解法插头dp,但不太好写 ...

  3. JavaScript原型详解

    1,前言 下面是2008年Github创建以来,各种编程语言的排名情况 排名其中JavaScript自2015年之后就盘踞第一名,成为github上被使用最多的语言,早期,JS的使用还主要集中于浏览器 ...

  4. av_seek_frame() 定位为什么不准呢?

    初次学习和使用ffmpeg,电脑系统有点老,没办法使用最新版的ffmpeg 3.3,只能从别处下载了一个2.8版的用用,官网提供的历史版本都没有我电脑可用的版本. 花了两天时间学习并写了一个简单的处理 ...

  5. 使用python制作验证码

    方法一 简单型:使用random模块制作一个随机字母与数字的验证码 import random def make_code(n): res='' for i in range(n): num=str( ...

  6. bcftools将vcf生成bgzip和index格式

    利用bcftools软件将vcf格式生成gz格式和index格式,需要用到“-Oz”和“index”命令,具体如下: /bcftools-1.8/bin/bcftools view ExAC.vcf ...

  7. python之OpenCv

    1.安装 pip install opencv-python 2.初步简绍 创建窗口显示图像 cv2.namedWindow(窗口名称[,窗口标识]) 例如:cv2.namedWindow(" ...

  8. 5.django学习模型

    ##Django Models ##编写models 1.在应用根目录下创建models.py并引入models模块,创建类,继承models.Model该类即是一张数据表 2.字段创建 ##映射数据 ...

  9. JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...

  10. TeamViewer 安装

    TeamViewer 安装 ----------- 免费版的安装 安装后打开使用 ------------------------------------