13

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

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

4

8 回答 8

9

我会尽可能地尝试使开发尽可能接近生产。IBM 和 Sun 的 JDK 肯定都满足 SDK 认证,但它们绝不相同。它们的检测和内存管理至少略有不同。如果不出意外,JDK 中的错误会有所不同,您的代码可能只会在一种情况下与另一种情况下发生故障。它也可能只发生在凌晨 4 点,当满月时,尤其是当你有公司过来的时候。

我无法告诉您从哪里获得 IBM 的 jdk,但如果您在公司获得了 websphere 的许可证,您应该与 IBM 联系以获得指向该 JDK 的链接。

祝你好运,并始终尽量减少差异。

于 2008-09-22T14:44:28.260 回答
4

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

但是,JRE 存在差异。例如,我记得当我使用反射列出一个类的方法或字段时,IBM JRE 曾经以与 Sun 不同的顺序将它们提供给我。

于 2008-09-22T14:39:57.897 回答
3

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

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

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

于 2008-09-22T14:40:53.510 回答
3

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

于 2011-10-25T14:53:41.903 回答
2

除非您引用 java.* 和 javax.* pacakges 之外的类(您不应该这样做),否则使用任何 JDK 编译都不会导致问题。当然,给定供应商的 JDK 和规范可能会导致一些很难追踪的非常奇怪的运行时错误,但我以前从未见过这种情况。

我建议使用目标 JRE 运行您拥有的任何测试套件,因为供应商之间的运行时行为差异比编译语义更频繁。

于 2008-09-22T14:42:12.510 回答
2

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

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

于 2008-09-22T14:46:23.917 回答
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 构建。

最好的答案是与供应商核实,看看他们是否支持您的配置。你不想做的是让它工作,然后在现场遇到问题,打电话给支持并发现你有一个不受支持的环境。

于 2008-09-26T07:28:41.160 回答
0

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

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

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

于 2008-09-22T14:41:33.150 回答