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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如果您需要64位JVM,我建议可能有64位构建,而我不能专门评论Windows,我可以告诉您,AIX和Linux都有64位WebSphere 6.1构建。

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

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

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

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