杀手设施或场景会使另一个JVM成为比Sun JVM更好的选择吗?

Tho*_*sen 23 java jvm

对于Java SE,有几个JVM可用于在x86上的生产中运行:

加上一些在服务器上运行的自定义产品:

其他平台:

  • Sun Solaris JVM - 比x86更好的可伸缩性?
  • (编辑)用于Java的GNU编译器 - http://gcc.gnu.org/java/ - 可以在多个平台上编译为本机代码.

Sun JVM与jvisualvm程序具有明显的优势,该程序允许运行时检查运行代码.是否有任何其他JVM的技术优势可能使其成为开发和/或生产的更好选择?

换句话说,是否有一个杀手级设施或场景可以在另一个JVM上投入时间/精力/金钱?

(如果它们是一个不错的选择,还请建议其他JVM).

Kir*_*lin 13

JRockit附带JRockit Mission Control,这是一个工具套件,可用于监视JVM和您的应用程序.你可以在这里下载它,它可以免费用于开发.

Mission Control具有许多VisualVM缺失的功能,例如在线内存泄漏检测器,延迟分析器,Eclipse集成,JMX.logging to file.如果您想将VisualVM与Mission Control进行比较,请参阅发行说明和最新版本的文档.


Pas*_*ent 12

IBM J9

这是您可以阅读或听到的关于J9的销售演讲:

IBM已经发布了适用于Java 6的SDK.产品二进制文件可用于x86和64位AMD上的Linux,以及适用于32位和64位PPC的AIX.除了支持Java SE 6平台规范外,新SDK还侧重于Java虚拟机之间的数据共享,增强的诊断信息,操作系统堆栈回溯,更新的jdmpview工具,平台稳定性和性能.

有些人会说IBM SDK具有超越速度的一些优势,PermGenSpace的使用和扩展要比Sun SDK或GCJ好得多(对于客户端应用程序来说不是很大,但是繁重的J2EE服务器,特别是门户服务器,可以真正引起太阳JDK的胃灼热).但是,根据本文比较Sun与IBM JVM GC,结果表明内存性能主要取决于应用程序而不是VM.

因此,虽然IBM JVM以其故障排除功能(比Sun的JVM更先进)而闻名,但我并不相信GC级别的差异.

Sun的JVM比IBM更具优势,至少在Solaris上是:DTrace提供商.实际上,我一直主要在Solaris上使用Weblogic,所以Sun'JVM一直是自然的选择.

Oracle JRockit

几年前我做了BEA/Oracle JRockit的一些基准测试,它确实是一个快速的虚拟机,然后它支持比Sun的VM更大的堆.但它有一些稳定性问题,对生产来说并不是很好.从那时起事情可能会发生变化.

Apache Harmony

我可能错了,但对我来说,Harmony是由IBM的代码捐赠(好处:社区正在进行维护)而我真的不明白为什么我应该考虑Harmony而不是IBM J9.

Apple的JDK

我从来没有使用Mac进行制作,所以我无法回答.我只记得Apple需要一些时间来捆绑Java 6,我不知道为什么.这可能不合理,但这让我很怀疑.

OpenJDK的

我知道有些供应商正在为OpenJDK 提供生产支持(例如RedHat with RHEL 5.3+,请参阅此博客条目),因此它可能是Sun不支持的平台的选项.但是,除非有人能告诉我是什么让OpenJDK比Sun更好,我想我会在支持的平台上安装Sun JVM.


所以对我来说,选择实际上是:Sun的JVM,除非我要运行一些Websphere的东西,在这种情况下我会选择IBM J9.但说实话,我从来没有遇到过我在Sun的JVM上无法解决的情况,并且可能有理由(临时)交换到IBM的那个,所以我无法确定故障排除功能是否那么好.但我承认,我可能会缺乏对IBM JVM的了解.


Fla*_*gan 7

一些应用程序,如金融和计算科学,将从十进制浮点的硬件实现中受益匪浅.IBM推出了一系列处理器(POWER6,z9和z10大型机),这些处理器实现了IEEE 754-2008十进制浮点标准.最新的IBM JDK可以s使用硬件加速BigDecimal.

To allow developers to easily take advantage of the dedicated DFP hardware, IBM 
Developer Kit for Java 6 has built-in support for 64-bit DFP through the 
BigDecimal class library. The JVM seamlessly uses the DFP hardware when 
available to remove the need for computationally expensive software-based decimal
arithmetic, thus improving application performance.

这是一个非常简单的情况,但是如果你有一个方便的z10大型机并希望在Java中使用它的十进制浮点单元,那么IBM JVM将是比Sun JVM更好的选择.

- Flaviu Cipcigan


Yon*_*oni 5

您应该关注的典型功能/场景是性能和速度.

无论白皮书说什么,最终你需要自己做基准测试.

我偏向于IBM,因为几年前我在那里工作过.我没有亲自处理jvm开发,但我记得jvm开发小组的重点是以下几点:

  • 专有垃圾收集优化.这不仅包括更快的GC,还包括更多配置选项,例如服务器和客户端的GC.这是在Sun提供类似选择之前.
  • 使用JNI接口可以更快(x10)本机性能.当Eclipse/WSAD开始获得牵引力并且swt被大量使用时,这一点尤其重要.如果您的应用程序使用了很多JNI,那么我认为值得您将IBM jdk与Sun jdk进行对比.
  • 稳定性和可靠性.我认为这只有在您购买IBM的商业支持时才有意义,例如服务层的SLA(WebSphere和db2,集群环境等).在这种情况下,只有在您使用jvm时,IBM才会保证其产品的稳定性.

关于OpenJDK,我建议您查看OpenJDK的这段历史.我的理解是OpenJDK 7几乎与Sun的jdk 7相同,因此性能很可能是相同的.主要区别在于许可以及webstart等小型组件.

如果要从数据库中运行java代码(通过存储过程),Oracle的jvm非常有用.它包括一些优化,可帮助数据库在此方案中更快地运行.

正如其他人所说,Sun一直在追赶他们的竞争对手.我认为在1.4天内差异更明显,但今天没有那么多.关于jvisualvm,其他供应商也提供类似的工具,所以我不认为这是一个问题.

最后,还有一个指标(尽管有点争议)表明这些供应商对其VM的严重程度.这是他们发布的相关专利数量.如果您需要说服您的老板,或者您想阅读专利,这可能会有用:)

专利检索:ibm和java - 4559项专利.

专利检索:oracle和java - 323.