这几种常见的JVM,你了解吗???

(文章是个人对周志明大神的《深入理解java虚拟机》一书的学习笔记,文章内容均来自对原文内容的概括)

1.虚拟机始祖:Sun Classic/Exact VM

  Sun Classic是java世界的第一款商用虚拟机,以今天的视角看来,Sun Classic虚拟机的技术已经相当原始,这款虚拟机最初的使命也早已终结。这款虚拟机只能使用纯解释器的方式来执行,这也意味着如果你需要在开发时使用及时编译的功能,你就必须外挂即时编译器,其中的Sun Workshop JIT就是Sun公司提供的一款即时编译器,其他类似的外挂编译器还有Symantec JIT和shuJIT。这里有一点值得注意的地方,就是当我们使用外挂的编译器时,由于解释器和编译器不能配合工作,这就意味着如果要使用编译执行,编译器就不得不对每一个方法、每一行代码都进行编译,而无论他们执行的频率是否具有编译的价值。

  Exact VM的命名由来是因为它使用了准确式内存管理(Exact Memory Management),准确式内存管理是指虚拟机可以知道内存中某个位置的数据具体是什么类型。譬如内存中有一个32bit的整数123456,虚拟机将有能力分辨出它到底是一个指向了123456的内存地址的引用类型还是一个数值为123456的整数,准确分辨出哪些内存是引用类型,这也是在垃圾收集时准确判断堆上的数据是否还可能被使用的前提。虽然Exact VM的技术相对Classic VM来说先进了很多,但是它的命运显得十分英雄气短,在商业应用上只存在了很短的时间就被外部引进的HotSpot VM所取代,而Classic VM的生命周期则相对要长不少,它在JDK1.2之前是JDK中唯一的虚拟机,在JDK1.2时,它与HotSpot VM并存,但默认使用的是Classic VM(用户可用java -hotspot参数切换至HotSpot VM),而在JDK1.3时,HotSpot VM成为默认的虚拟机,它仍然作为虚拟机的“备用选择”发布(使用java -classic参数切换),知道JDK1.4的时候,Classic VM才完全退出商用虚拟机的历史舞台,与Exact VM一起进入了 Sun Labs Research VM中。

2.武林盟主:HotSpot VM

  相信所有java程序员都听说过HotSpot虚拟机,它是Sun/OracleJDK和OpenJDK中的默认java虚拟机,也是目前使用最广泛的虚拟机,HotSpot既继承了Sun之前两款虚拟机的优点,也有很多自己的技术优势,比如它名称中的HotSpot就是指它的热点探测技术。HotSpot虚拟机的热点探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知即时编译器以方法为单位进行编译。如果一个方法被频繁调用,或者方法中的有效循环次数很多,将会分别触发标准即时编译和栈上替换编译(On-Stack-Replacement,OSR)行为。通过编译器和解释器恰当地协同工作,可以在最优化的程序响应时间和最佳执行性能中取得平衡,而无需等待本地代码输出才能执行程序即时编译的时间压力也相对较小。这样有助于引入更复杂的代码优化技术,输出更高的本地代码。
  2006年,Sun陆续将SunJDK的各个部分在GPLv2协议下开放了源码,形成了Open-JDK项目,其中当然也包括HotSpot虚拟机。HotSpot从此成为Sun/OracleJDK和OpenJDK两个两个实现极度相近的JDK项目的共同虚拟机。Oracle收购Sun以后,建立了HotRockit项目来把原来BeanJRockit中的优秀特性融合到HotSpot之中。到了2014年的JDK8时期,里面的HotSpot就已是两者融合的结果,HotSpot在这个过程中移除掉永久代,吸收了JRockit的Java Mission Control监控工具等功能。
  得益于Sun/Oracle JDK在java应用中的统治地位,HotSpot利索当然成为了全世界使用最广泛的Java虚拟机,是虚拟机家族中毫无争议的“武林盟主”。

3.商用虚拟机-Zing

  Zing是一个兼容并符合Java SE规范的JVM。Zing针对Linux和x86进行了优化。Zing专为需要大内存,高事务率,一致响应时间或高持续吞吐量的任意组合的企业应用程序和工作负载而设计,是唯一能够提供与堆大小无关的可预测响应时间的JVM。

  Zing与传统JVM在部署Java应用程序方面有何不同?
Zing是一个高度优化的 JVM和弹性运行时,它打破了传统的Java规模障碍,并为Java应用程序,规模和吞吐量提供了数量级的改进。Zing发行版包括一个非侵入式,生产时应用程序可见性工具,称为Zing Vision(ZVision)。
借助ZVision,IT组织首次拥有零开销,细粒度的可见性工具,可帮助发现问题并加速解决难以捉摸的生产问题。

  Zing是一个更好的 JVM,它利用先进技术为主流Java应用程序提供更高的性能。我们的大多数客户不需要巨大的Java堆或超低延迟 - 他们只是希望他们的Java应用程序可靠地运行。Zing通过Azul C4提供这些优势 (Continuously Concurrent Compacting Collector) (连续并发压缩收集器)消除了限制所有传统JVM可扩展性的“stop-the-world”(“全局停顿”)。由于单实例可以扩展到几千兆字节到多达8TB内存,因此Zing可以显着减少支持企业应用程序或多租户SaaS / PaaS解决方案所需的实例总数,从而简化部署,显着提高响应时间一致性并降低运营支出和资本支出。Zing还附带ReadyNow!解决Java预热问题的技术,允许您的应用程序快速启动并保持快速。

Zing如何提供比其他JVM更好的性能?
  Zing消除了“stop-the-world”(“全局停顿”)式的垃圾收集,其他JVM限制了这样的可扩展性,因此每个Zing实例可以扩展到8TB的堆内存。Zing还使用高度优化的即时(JIT)编译器,默认使用分层编译。
传统的Java热身问题由Zing的ReadyNow解决!允许应用程序快速启动并保持快速运行的技术,允许运营团队在运行之间保存和重用累积的编译器优化,并避免在工作负载或条件发生变化时可能减慢处理速度的去优化停顿。

什么是Zing Vision?
  Zing Vision是一个安装在Zing里的零开销,永远在线的线上监控,诊断和调整工具。
Zing总是收集数据作为其必须完成的工作的辅助任务,这使得系统管理员可以通过Zing Vision利用这些信息,而不必担心影响正在运行的应用程序。

Zing如何解决Java热身问题(Java warm up)?
  Zing使用Azul创新的ReadyNow!™ 技术来解决热身问题。ReadyNow专为低延迟系统而设计!允许Java应用程序在启动时实现最佳性能和一致性,并最大限度地减少负载条件发生变化时可能发生的破坏优化。

为什么要介绍Zing的名为“Falcon”的新编译器?
  Falcon JIT编译器的开发是为了确保Java开发人员和基于Java的企业能够从当今的服务器硬件中获取最大性能。

Falcon JIT编译器基于什么技术?
  Falcon JIT编译器基于LLVM技术,这是一个受欢迎的编译器基础设施项目,得到了一流大学和包括Adobe,Apple,Google,NVIDIA和Intel在内的数十家企业贡献者的积极参与。

Falcon比C2更快吗?
  是。

Falcon支持哪些版本的Java?
  Falcon适用于使用Java SE 7和Java SE 8构建的应用程序。作为功能预览,Falcon还可以与Java SE 10和11一起使用(即将推出)

Zing如何支持大堆大小以及它是如何弹性的?
  Zing允许Java应用程序利用他们需要执行的任何数量的内存,仅受系统中物理内存或虚拟机管理程序可识别的数量的限制。
由于Zing独特的垃圾收集器,基于Azul的开创性C4 (连续并发压缩收集器)技术,GC暂停与JVM堆的大小无关,并且不限制应用程序可伸缩性。
此外,Zing还包括一项专利创新的“内存池”(即内存储备),允许JVM根据实时需求动态增加内存占用量; 当需求减少时,Zing将此内存返回给系统。
此内存预留不仅可确保在高负载下保持一致的性能,而且可以充当因错误或编码错误而遇到“内存泄漏”的JVM的紧急内存。

什么是Zing ReadyNow!™?
  ReadyNow!是Zing运行时内置的技术,可以很好地解决Java热身问题。
他有两个主要特点:
首先,它使运营团队能够跨运行保存和重用编译器优化。
第二,ReadyNow!为开发人员提供强大的API和编译器指令,以预编译常用的代码或必须快速的方法,即使它们不经常被调用。

Zing如何提供无间断操作?
  Zing默认使用Azul C4垃圾收集器。无论堆大小如何,C4收集器都在不断地进行压缩,并且永远不会使用“stop-the-world”(“全局停顿”)的暂停来进行垃圾收集。

什么是C4垃圾收集器?
  该C4(连续并行压缩收集器) 是一个更新的代执行Azul Pauseless GC算法,是Zing的默认垃圾收集器。

Zing能帮助解决数据库争用吗?
  是。使用较少的应用程序实例,您的数据库可以看到更少的连接和更少的争用

Zing是否已经使用各种Java应用程序进行了测试?
  是。对于每个版本,我们测试各种应用程序堆栈(包括Wildfly,Active MQ,Cassandra,WebLogic Server,WebSphere Application Server,JBoss和Tomcat),以及其他开源软件和第三方应用程序。

企业主为什么要关心Zing?
  Java应用程序通常是关键业务和关键任务。影响收入和使用的性能和可伸缩性问题通常不是由应用程序,数据库或网络引起的,而是通常与JVM的选择有关。通过选择Zing,您可以消除意外长时间的用户等待时间和内存不足崩溃,从而捕获收入和客户的损失,并在需求突然出现时提供一致的用户体验。


版权声明:本文为qq_41628667原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>