除了许可证之外,JVM实现在哪些方面有所不同?每个JVM都实现泛型处理的类型擦除吗?
以下是各个JVM之间的差异:
- JRockit
- IBM JVM
- SUN JVM
- Open JDK
- Blackdown
- Kaffe
......其中一个处理尾调用优化吗?
除了许可证之外,JVM实现在哪些方面有所不同?每个JVM都实现泛型处理的类型擦除吗?
以下是各个JVM之间的差异:
......其中一个处理尾调用优化吗?
JVM的实现在JIT编译、优化、垃圾回收、支持平台和Java版本等方面可能存在差异。它们都必须符合一组特定功能和行为,以便正确地执行Java字节码。
正如您指出的,主要的区别通常在于许可证。其他非技术差异通常在于免费/付费支持选项、与其他技术(通常是J2EE服务器)的集成以及访问源代码。
注意:虽然J2EE服务器在JVM上运行,但有些服务器具有集成工具,用于监视、分析和调整JVM性能。
就技术差异而言,随着时间的推移,这些差异变得不那么重要了。曾经,IBM和JRockit JVM相对于参考的Sun实现性能要好得多。这是由于运行时优化类型的显著差异、垃圾回收的差异以及本地代码的差异(以及各个类使用多少本地代码)所致。这些性能差异现在不再那么显著。
一些JVM还包括或与诊断和监控工具集成。JRockit包括一组用于监视JVM性能的工具。Sun提供了各种基于JMX的工具,具有重叠功能以执行相同的操作。IBM Websphere曾经包括一个类似的工具集,用于他们的整个J2EE应用程序服务器(我不确定他们是否仍然这样做,但我认为这仍然是正确的)...
一些开源JVM因为重新从头开始开发而速度稍慢。因此,它们需要更多时间来赶上。在大约两年前我最后检查时,Blackdown比Sun JVM慢得多(1.5倍-2倍?),并且还落后于Java的支持版本。
JIT编译是一些JVM所没有的东西。
像类型擦除之类的事情都是编译器完成的,以便与旧版JVM向后兼容。大多数JVM应该支持您需要的所有功能,但有些可能比其他JVM更加优化。我猜Sun JVM可能是最快的。
如果JVM声称是Java,它必须通过TCK,提供大量的标准功能。
区别在于非核心位置,如垃圾回收、Sun JVM中的jconsole/visualvm、预编译等。
Java目前还不支持尾调用优化。John Rose正在领导相关工作,计划在未来的版本中加入该功能,并描述了方法和一些涉及的问题。
JVM之间的另一个区别是在未记录的API上的行为不同(例如com.sun.xxx)。例如,Sun的JVM和IBM的JVM在信号处理方面都有略微不同的行为(IBM的JVM在某些情况下不允许应用程序捕获“INT”信号)。