使用哪个供应商的JDK构建是否重要?

时间:2008-09-22 14:34:44

标签: java build-process

如果我使用WebSphere 6.1(Java 1.5)部署到服务器,我应该在构建盒上使用IBM的JDK吗?或者Sun的JDK会编译成相同的二进制文件吗?

如果我应该使用IBM,我在哪里可以获得Windows x64版本?

8 个答案:

答案 0 :(得分:8)

我会尽可能地尽可能地保持开发尽可能接近生产。 Ibm和Sun的JDK当然都满足SDK认证,但它们绝不相同。他们的仪器和内存管理至少略有不同。如果不出意外,JDK中的错误将会有所不同,您的代码可能只会在一种情况下与另一种情况相遇。它也可能只发生在凌晨4点,当月亮满了,特别是当你有公司结束时。

我不能告诉你在哪里获得IBM的jdk,但是如果你在公司获得了websphere的许可,你应该在IBM有一个联系人,以获得一个指向该JDK的链接。

祝你好运,并尽可能减少差异。

答案 1 :(得分:4)

它应该没有任何区别。它可能不是完全相同的二进制,但100%兼容。我假设您正在使用外部库,例如log4j或者hibernate或者其他什么,而且那些不是使用IBM JDK构建的。

然而,JRE存在差异。例如,我记得当我使用反射列出类的方法或字段时,IBM JRE过去常常以不同于Sun的顺序将它们提供给我。

答案 2 :(得分:3)

我将使用相同的JDK来构建将在部署应用程序时使用(如果您可以控制它)。

如果编译器不同,二进制文件可能会有所不同,但它们在语义上应该是相同的。我不知道IBM是否编写了自己的编译器。 JRockit JDK实际上使用Sun编译器,但JVM是不同的。因此,对于JRockit,二进制文件是相同的。

如果应用程序在运行时与不同的JDK一起使用,我仍然会使用您认为大部分时间将在部署时使用的应用程序构建,并使用不同的JDK进行一些运行时测试。

答案 3 :(得分:3)

IBM JDK附带J9 VM,SUN JDK在Hotspot VM上运行,它们具有不同的算法。如果在SUN JDK中部署和调优并且您的生产使用IBM JDK for WAS,则您的应用程序可能无法执行相同的操作。与供应商核实并打开一张票,让我们知道它是怎么回事。

答案 4 :(得分:2)

使用任何JDK进行编译不应该导致问题,除非你引用java。*和javax。* pacakges之外的类(你不应该这样做。)当然,给定的供应商之间总是有可能存在差异。 JDK和规范可能导致一些非常奇怪的运行时错误很难追踪,但我以前从未见过这样的经验。

我建议运行使用目标JRE的任何测试套件,因为供应商之间的运行时行为比编译语义更常见。

答案 5 :(得分:2)

JDK正在将您的代码编译为字节码,而不是直接编译为机器代码。预计不同供应商的编译器会生成跨厂商兼容的代码。例如,用于JDK1.5的IBM编译器将生成在SUN的JDK 1.5及更高版本上运行的代码,没有任何问题。

另一个问题是编译器如何优化字节码,我没有信息表明某些编译器执行的优化比其他编译器更好。优化的最大部分是在运行时由JVM执行的(例如JIT(即时)或AOT(提前)策略。)

答案 6 :(得分:1)

与WebSphere合作很长一段时间JDK的版本非常重要。 WebSphere 6.1附带IBM JDK 1.5(或者它是5)。在修补WebSphere时,JDK也有相应的补丁。虽然它可能适用于不同版本的JDK(即使是不同的供应商),但我怀疑如果出现问题,您将获得IBM的大力支持。

如果您需要64位JVM,我建议可能有64位版本,而我无法对Windows进行评论,我可以告诉您,AIX和Linux都有64位WebSphere 6.1版本。

最佳答案是与供应商核实,看看它们是否支持您的配置。您不想做的就是让它正常工作,然后在现场解决问题,调用支持并发现您的环境不受支持。

答案 7 :(得分:0)

它们应该编译为相同的字节码规范,尽管它们可以编译不同的字节码(就像不同的C编译器生成不同的机器代码一样)。我不认为在运行生成的代码时会出现任何问题 - 我在Mac上编译了Java 1.4,然后部署到运行在PocketPC上的IBM J9之前没有问题(这是在J9可以处理Java 5字节码之前)

无论如何,我肯定会将您的编译平台作为自述文件的一个要点,以便您的客户可以查看它是否有问题。

或者,您可以使用ANT构建和部署,并将Sun的JDK与ANT一起使用。