- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对升级到 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 套接字读取消息、运行业务逻辑并在另一个套接字上写入消息的微秒。每条消息都是相同的,并且没有为任何消息输入新的代码路径。
最佳答案
JRockit 是它自己的(纯 C)代码库,不同于 OpenJDK。它包含不同的垃圾收集器和完全不同的 JIT 编译器。 BEA 拥有的一个重要获利工具是低延迟 GC,它非常先进,即使在非商业变体中也是如此。在 JRockit 上花费了大量时间作为无尘室虚拟机实现。正如评论中所说的那样,在 HotSpot 代码库中重新实现东西并不是合并的问题。这远不是一个快速的过程,有些东西根本不会到达那里,至少不会以它们的 JRockit 形式出现。可以这么说,如果没有在边缘进行一些锉削,拼图 block 就不容易放入。 JDK7 Hotspot,将擅长其他事情,或者类似系统的不同版本,但是这可能会弥补你失去的一些性能。其他应用程序可能比 JRockit 6 运行得更快。
如果您有兴趣了解有关 JRockit(或任何 JVM)内部结构的更多信息,强烈推荐阅读“Oracle JRockit 权威指南”一书。完全披露,我可能会从每份副本中获得约 2 美元的税前版税,并将用它来购买浓缩咖啡。 :)
关于Java 7 JVM 比 JRockit 6 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903981/
当我在 Sun Standard JDK 下开发我的代码,并在 Oracle JRockit JVM 中运行我的代码时,我是否使用了 Hotspot VM 或 JRockit VM 提供的 Strin
我们的 ColdFusion 服务器和正确配置 JRE 时遇到问题。为了解决这个问题,我们安装了 Oracle JRockit 并切换了 jvm.config 以尝试查找任何内存泄漏。 安装 JRoc
是否可以使用选项-Xgc:确定性和非常大的-XpauseTarget=5000来收集所有垃圾。 我不太关心性能,我需要确保每个垃圾对象都被收集。 最佳答案 文档中是这么说的: 垃圾收集器针对非常短且确
每次我尝试在 Jdev 上运行 weblogic webcenter 应用程序时,我都会收到以下错误,而且我无法在网络上的任何地方找到有关如何解决此问题的任何引用。 starting weblogic
我想知道 JRockit 内存参数的所有列表。 JRocket 是否有类似“-XX:+UnlockCommercialFeatures”的内容。有什么想法 最佳答案 JRockit 命令行引用页面列出
我了解到 Sun JVM 中有一个设置,用于在发生 OM 时转储堆 (-XX:+HeapDumpOnOutOfMemoryErro)。 JRockit VM 是否有任何类似的设置或相同的设置会起作用?
我想下载 Bea JRockIt 5,因为 JRE 似乎无法分配超过 1.6 GB 的 VM。我找不到下载 JRockIT jre 的链接我使用的机器是 32 位 Windows7,内存 3GB。 提
我有以下代码,仅列出在平台 MBean 服务器中找到的所有 MBean 名称: public static void main(final String[] args) throws Except
有人在 JRockit VM 上运行 hessian 时遇到过这个异常吗? Caused by: java.lang.ArrayIndexOutOfBoundsException: -418
可用的 jrockit 下载之间的详细区别: Oracle JRockit Mission Control 和 Oracle JRockit Real Time *(版本 4.x) 有人在使用 Tom
我已经在我的 Ubuntu 11.10 中安装了 jrockit,我将配置 Tomcat7 以与 jrockit 一起运行以摆脱 PermGen (OutOfMemorry)。 但我不知道如何配置 T
我的应用程序占用了大量内存,jrocket jrcmd 向我显示它有一个巨大的“其他”内存部分。谁能告诉我它是什么? 来自下面的链接https://community.oracle.com/threa
我试过了 http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html但我得到的只是 The content on
有很多文章/网页指出 JRockit 将合并到新版本的 JVM 或 JDK 8: https://en.wikipedia.org/wiki/JRockit http://www.mythics.co
有人试过用 JRockit 运行 glassfish 吗?我看到一些引用资料说这是不可能的,但它们已经过时了。有人试过这个吗? 最佳答案 在 Windows 中是可能的。我们为多个面向公众的生产网络应
在Sun JVM中,由类加载器加载的类被放入permgen空间中并且永远不会被gc'd。 (除非类加载器超出范围)据我所知,JRockit 将相同的数据放在堆上。该数据是否会受到垃圾收集? 谢谢。 最
我无法在 Windows Server 2008 上安装 Tomcat 使用apache-tomcat-7.0.67.exe 与 JRockit jvm。我能够安装tomcat与oracle jvm完
我需要生成堆转储。jrockit 用于 java,我在 Windows PC 上安装了 weblogic,而不是 Unix。 我可以找到很多在 unix 中生成堆转储的答案/命令,但没有在 Windo
我查看了下载页面 http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html但只有 Java 6 版本可用。 最
我想通过 SNMP 协议(protocol)监控我的 Java 应用程序(在 JRockit 中运行)。我只需要一些基本信息。是否有任何启动参数可以添加到我的应用程序以启用 SNMP? 最佳答案 JR
我是一名优秀的程序员,十分优秀!