什么是虚拟机?你知道吗?( 二 )

  • JRE(Java Runtime Environment):指的是 Java 运行时环境,包括 Java API 类库、Java 虚拟机等内容,通常用于运行 Java 应用程序,通常用于生产环境
  • JVM(Java Virtual machine):指的是 Java 虚拟机,用于在不同的平台上执行 Java 应用程序
  • 可以清晰的看到,JVM 是 Java 应用程序能实现跨平台运行的核心 。因此,了解和学习 JVM 相关的知识,有助于开发者对 Java 相关技术有着更全面的认识 。
    在操作系统的命令行,输入java -version,即可看到当前 JDK 采用的是哪种版本的虚拟机 。
    什么是虚拟机?你知道吗?

    文章插图
    图片
    三、虚拟机简介说起 Java 虚拟机 , 许多开发者可能首先会想到  HotSpot 虚拟机,正如上文的截图部分 。
    实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM、Exact VM、BEA JRockit VM、IBM J9 VM等等,虚拟机的发展过程,可以用百花齐放这四个字来概括 。
    3.1、Sun Classic VM在 1996 年,Sun 发布 JDK 1.0 时,其中自带的虚拟机就是 Classic VM 。这款虚拟机使用的是纯解释器的方式来执行 Java 代码 , 简单的说就是边解释边运行代码,并非像现在这样通过编译器的方式来执行代码(先编译、后执行) 。在 Sun Classic 虚拟机中,解释器与编译器无法共同存在 , 因此 Java 应用程序执行速度上肯定快不起来,只能说够用 。
    在 1998 年,Sun 在发布 JDK 1.2 时,同时也公布了一款名为 Exact VM 的虚拟机,这款虚拟机尝试解决了 Classic VM 遇到的所有问题 。它的执行系统解决了 Classic VM 存在的解释器和编译器无法同时工作的问题,同时还具备了一些现代高性能处理器的特性 , 如:两级即时编译、准确式内存管理等 。
    但可惜的是,这款虚拟机一直没有真正被大规模使用过,此时 Sun Classic VM 依然作为默认的 Java 虚拟机 。
    3.2、HotSpot VM在 2000 年,Sun 在发布 JDK 1.3 时,公布将 HotSpot VM 作为默认的 Java 虚拟机 , 也就是大家广为流传的 Java 虚拟机 。
    实际上,这个虚拟机并不是由 Sun 公司原生开发的,而是由一个叫 Longview Technologies 公司开发的,Sun 公司注意到了这款虚拟机在 JIT 编译上的许多优秀成果,于 1997 年收购了 Longview Technologies 公司 , 从而获得了 HotSpot VM 的所有权 。
    HotSpot VM 不仅仅有前面说到两款虚拟机的优点,也有许多自己的新技术,例如:热点探测技术 。热点探测技术指的是通过执行计数器找出最具优化价值的代码 , 然后通知 JIT 编译器以方法为单位进行深度优化编译 。
    其实 Exact VM 中也有类似的技术,但最终还是选择了 HotSpot 作为默认的虚拟机 。
    HotSpot VM 作为默认的 Java 虚拟机之后,直到现在 , 依然是我们最常用的虚拟机,可见 HotSpot VM 的生命力之顽强!
    3.3、BEA JRockit  / IBM J9 VM前面说的是 Sun 公司研发的虚拟机,但除了 Sun 公司之外,其他组织、公司也研发过不少的虚拟机实现,其中最著名的就是 BEA 公司的 JRockit VM 和 IBM 公司的 J9 VM 了 。
    JRockit VM 是除 HotSpot 之外另一款响当当的虚拟机,BEA 公司在 2002 年收购的了此虚拟机的开发商 。这款虚拟机在相当一段时间里获称世界上速度最快的 Java 虚拟机 , 它是一款专注于服务器端应用的虚拟机,并且它的垃圾收集算法相比其它所有虚拟机表现更佳;此外,其提供的 MissionControl 服务套件也十分强大 。
    IBM 公司的 J9 VM 则是一款比较通用的虚拟机,其定位应用于从服务端到桌面应用,再到嵌入式的多用途虚拟机 。IBM 公司开发 J9 VM 的目的是将其作为 IBM 公司各种 Java 产品的执行平台 。稍有不同的是,IBM J9 VM 都只能跟 IBM 产品一起使用,虽然不存在技术限制,但是需要单独的商业许可证 。
    J9 VM 的性能水平大致跟 HotSpot VM 是一个档次的,在一些场景下,有时 HotSpot VM 快些 , 有时 J9 VM 快些 。
    3.4、其它 JVMHotSpot、JRockit 和 J9 这三个虚拟机 , 曾经在很长的时间并称三大主流 JVM,可以说是 Java 虚拟机发展史上比较耀眼的部分 。除此之外,其实还有各种各样的小范围使用的虚拟机 。
    例如 Azul VM 和 BEA Liquid VM 的专用商业虚拟机,性能非常强悍,可以管理至少数十个 CPU 和数百 GB 的内存资源,还提供在巨大内存范围内实现可控 GC 时间的垃圾收集器等等,这些虚拟机只运行在特定硬件平台,因此要求也比较高 。
    此外还有许许多多其他的虚拟机存在,例如:Apache Harmony、google Android Dalvik VM、Mircosoft JVM 等等,都在各自领域发挥作用 。


    推荐阅读