JVM 实现之间的差异

JVM 实现有何不同(许可除外)?是否每个 JVM 都为泛型处理实现了类型擦除?

区别在哪里:

  • 克罗基特
  • IBM JVM
  • 孙建民
  • 打开 JDK
  • 黑幕
  • 咖啡

.....处理其中一个尾部调用优化?


答案 1

JVM实现在实现JIT编译,优化,垃圾回收,支持的平台,支持的Java版本等方面可能有所不同。它们都必须满足一组功能和行为,以便它能够正确执行 Java 字节码。

正如您所指出的,主要区别在于许可。其他非技术差异往往在于免费/付费支持选项、与其他技术(通常是 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版本。


答案 2

类型擦除是一个编译器函数,因此独立于 JVM。


推荐