我对升级到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套接字读取消息、通过业务逻辑运行并将消息写入另一个套接字所需的微秒数。每条消息都是相同的,没有进入任何新的代码路径。