java - JVM 实现之间的差异

标签 java generics jvm jvm-languages tail-call-optimization

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/

相关文章:

java - 如何使用 TabLayout 在 ViewPager 的 Google Maps Fragment 中获取当前位置

JavaMail STARTTLS 错误?

java - 尽管在 Java 中被声明为基类型,如何限制同一对象之间的操作

apache-spark - 如何使指针为四个字节而不是八个字节

java - 字节缓冲区内存分配

java - 调度线程时的 JVM 公平性

java - 为什么 Java 在完全覆盖的枚举之后需要死返回语句?

java - Spring框架的XmlBeanDefinitionStoreException : The prefix "beans" for element "beans:bean" is not bound

c++ - Visual Basic.NET 中的 C++ 模板相当于什么?

swift - 我的 Swift 中的可变参数初始值设定项出了什么问题?