JVM实施在哪里不同(许可除外)? 每个JVM是否都为Generic处理实现Type Erasure?
以下是什么区别:
..... 使用Tail-Call-Optimization处理其中一个?
答案 0 :(得分:18)
JVM实现在实现JIT编译,优化,垃圾收集,支持的平台,支持的Java版本等方面可能有所不同。它们都必须满足一组功能和行为,以便它能够正确执行Java字节码。 / p>
正如您所指出的,主要区别在于许可。其他非技术差异往往是免费/付费支持选项,与其他技术(通常是J2EE服务器)的集成以及对源代码的访问。
注意:当J2EE服务器在JVM上运行时,某些服务器具有用于监视,分析和调整JVM性能的集成工具。
就技术差异而言,这些年来增长不那么重要。曾几何时,IBM和JRockit JVM的性能远远超过参考Sun实现。这是由于运行时优化的类型,垃圾收集的差异以及本机代码的差异(以及各种类使用的本机代码的数量)的显着差异。这些性能差异不再那么重要了。
某些JVM还包含或集成了诊断和监视工具。 JRockit包含一组用于监视JVM性能的工具。 Sun提供了各种基于JMX的工具,这些工具具有相同的重叠功能。 IBM Websphere曾经为他们的整个J2EE应用程序服务器提供了一组类似的工具(不确定它们是否仍然存在,但我认为它仍然是真的)......
一些开源JVM的性能往往稍慢,因为它们已经从头开始重新开发。因此,他们有更多的追赶。最后我检查了大约2年前,Blackdown比Sun JVM慢得多(1.5x-2x?)。它也支持Java版本。
答案 1 :(得分:12)
类型擦除是compiler function,因此与JVM无关。
答案 2 :(得分:1)
JIT编译是某些JVM没有的东西。
答案 3 :(得分:1)
类型擦除之类的东西由编译器完成,以便与旧的JVM向后兼容。大多数JVM应该支持您需要的所有功能,但有些可能比其他功能更优化。我猜测Sun JVM可能是最快的。
答案 4 :(得分:1)
如果JVM声称是Java,它必须通过TCK,提供大量的股票功能。
差异在非核心位置,如垃圾收集,Sun JVM中的jconsole / visualvm,预编译等。
澄清:TCK是虚拟机必须通过的测试套件才能正式符合Java标准。
答案 5 :(得分:1)
Java尚不支持尾调用优化。 John Rose正在努力将其纳入未来版本,并描述了所涉及的approach, and some of the issues。
答案 6 :(得分:1)
JVM之间的另一个区别是未记录的API上的行为。 (例如com.sun.xxx) 例如,Sun的JVM和IBM的JVM在信号处理方面的行为略有不同。 (在某些情况下,IBM的JVM不允许应用程序捕获“INT”信号。)
答案 7 :(得分:1)
JVM就像一个虚拟机,用于加载类和Bytcode变量,执行代码。 Applocaion编程接口是包的集合。和包是类的集合。 Java程序在JVM安装和工作的地方执行。