OpenJDK 和 Oracle 之间是否存在性能差异?

Bra*_*rks 9 jdk jvm openjdk

Oracle 最近决定开始对其 JVM 的商业用途收费。

我们的团队已经开始改用 OpenJDK,并且发现一切似乎都运行良好,只是我们的性能变慢了。

我们的服务器是 linux 服务器,根据我们的性能团队,

我们已经观察到大多数 java 调用的速度很慢。我们查看了日志并调查了一些调用,我们没有看到任何异常或错误,只是速度很慢。

有没有其他人有任何关于这是否属实的数据,即 OpenJDK 平均比 Oracle JVM 慢?

回答:对我们来说,这个问题被确定与haproxyUbuntu 和 OpenJDK 相关。如果将这 3 件事结合起来,我们会在每个套接字连接上看到额外的 5 毫秒延迟。改变这三个因素中的任何一个,性能就会恢复。

我也会将此作为答案发布,因此可以在两个地方找到它

har*_*ymc 5

您会发现这篇Oracle 博客文章的摘录很有趣 :

:在 OpenJDK 存储库中找到的源代码与您用于构建 Oracle JDK 的代码有什么区别?

:非常接近 - 我们的 Oracle JDK 版本构建过程建立在 OpenJDK 7 之上,只添加了几部分,例如部署代码,其中包括 Oracle 对 Java 插件和 Java WebStart 的实现,以及一些封闭源代码的第三部分方组件,如图形光栅化器,一些开源第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源 Oracle JDK 的所有部分,除了我们考虑的商业功能,如 JRockit Mission Control(Oracle JDK 中尚未提供),并用开源替代品替换受阻碍的第三方组件以实现更接近的平等代码库之间。

由于 Oracle 负责创建两者,很明显它将确保其客户有充分的理由付费,而性能是显而易见的手段。

我相信 OpenJDK 是仅解释器的 JVM。这更容易移植,因为它没有特定于体系结构的汇编代码,但不幸的是,它的性能较低。

我认为 OracleJDK 利用了平台的浮点 ABI(RP1 上的软浮点和 RP2 上的硬浮点)。它可能还有一些特定于平台的代码以使其更快。

一个JIT(刚刚在时间)的编译器 曾一度被包含在这两个,一个名为鲨鱼,但我不知道,如果它被包含在OpenJDK的。 维基百科 OpenJDK 没有提到 JIT,我确实发现了这个古老而令人不安的问题 Remove Shark compiler。但是, 维基百科 Java 版本历史 确实包括 JIT。

如果今天的 OracleJDK 包含一个特定于平台的 JIT 编译器,而 OpenJDK 没有,这可能很好地解释了性能差异,