JVM 实现有何不同(许可除外)? 每个 JVM 是否都为泛型处理实现了类型删除?
两者的区别在哪里:
- JRockit
- IBM 虚拟机
- Sun 虚拟机
- 打开JDK
- 黑幕
- 咖啡馆
..... 使用尾调用优化处理其中之一?
最佳答案
JVM 实现在实现 JIT 编译、优化、垃圾回收、支持的平台、支持的 Java 版本等方面可能有所不同。它们都必须满足一组特性和行为,以便正确执行您的 Java 字节码。
正如您所指出的,主要区别在于许可。其他非技术差异往往在于免费/付费支持选项、与其他技术(通常是 J2EE 服务器)的集成以及对源代码的访问。
注意:虽然 J2EE 服务器在 JVM 上运行,但某些服务器具有用于监视、分析和调整 JVM 性能的集成工具。
就技术差异而言,这些年来已经变得不那么重要了。曾几何时,IBM 和 JRockit JVM 的性能远远优于引用的 Sun 实现。这是由于运行时优化类型的显着差异、垃圾收集的差异以及 native 代码的差异(以及各种类使用的 native 代码的数量)。这些性能差异不再那么显着。
一些 JVM 还包含或集成了诊断和监控工具。 JRockit 包括一组用于监视 JVM 性能的工具。 Sun 提供了各种基于 JMX 的工具,这些工具具有重叠的功能来执行相同的操作。 IBM Websphere 曾几何时为他们的整个 J2EE 应用程序服务器包含一组类似的工具(不确定他们是否仍然这样做,但我认为这仍然是正确的)...
一些开源 JVM 的性能往往会稍慢一些,因为它们是从头开始重新开发的。因此,他们还有更多工作要做。大约 2 年前我检查过,Blackdown 比 Sun JVM 慢得多(1.5 倍到 2 倍?)。它也有点落后于受支持的 Java 版本。
关于java - JVM 实现之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/747360/