【问题标题】:Does it matter which vendor's JDK you build with?您使用哪个供应商的 JDK 构建是否重要?
【发布时间】:2010-09-12 00:37:26
【问题描述】:

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

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

【问题讨论】:

    标签: java build-process


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

                长期使用 WebSphere,JDK 的版本非常重要。 WebSphere 6.1 附带 IBM JDK 1.5(或者是 5)。当您修补 WebSphere 时,JDK 也有等效的修补程序。虽然它可能适用于不同版本的 JDK(甚至是不同的供应商),但如果出现问题,我怀疑您是否会得到 IBM 的大力支持。

                如果您需要 64 位 JVM,我建议可能有 64 位构建,虽然我无法具体评论 Windows,但我可以告诉您有一个适用于 AIX 和 Linux 的 64 位 WebSphere 6.1 构建。

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

                【讨论】:

                  【解决方案8】:

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 2012-08-26
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-03-25
                    • 1970-01-01
                    • 2018-03-17
                    • 1970-01-01
                    • 2013-10-02
                    相关资源
                    最近更新 更多