我对升级到 Java 7 非常感兴趣(出于我自己的编码原因)。但是,我们的用户对延迟非常敏感(一切都需要亚毫秒)。我在 3 个不同的 JVM 之间做了一个简单的性能比较测试,发现 Java 7 的速度要慢得多。测试通过我们的应用程序推送了一些简单的消息。此测试是低负载、负载量测试,每隔几秒推送一条消息。结果是(以微秒为单位):
- Hotspot 6 (build 24): msgs= 23 avg= 902
- JRockit 6 (R28 b 29): msgs= 23 avg= 481
- Hotspot 7 (build 04): msgs= 34 avg=1130
Oracle 的策略是从 Java 7 开始合并 JRockit 和 Hotspot(所以 JRockit 6 是最后一个可用的)。有谁知道为什么性能差这么多?(需要注意的一点是,代码是在 Java 1.6 下编译的。不确定这是否能解释它......)
更新:我投票结束我自己的问题,因为我可以从评论中看到,我真的无法传达足够的信息来使这个问题成为一个建设性的问题。感谢所有评论的人。
更新:经过更多反馈后,我想我会提供更多信息。测试总是在重新开始之后。每个测试的所有因素都相同。唯一改变的是 JVM。多次重复测试给出一致的结果。在任何测试迭代中都没有发生 GC。
下面是其中一个测试运行的图形值。对于 JRockit 和 Hotspot 7,第一个延迟值被丢弃了。JRockit 具有巨大的初始价值,但随后很快优化并趋于均值。Hotspot 7 需要更长的时间来优化,并且永远不会下降到像 JRockit 这样低的平均值。每个数据点代表从 TCP/IP 套接字读取消息、运行业务逻辑以及在另一个套接字上写入消息的微秒。每条消息都是相同的,并且没有为任何消息输入新的代码路径。