代码之家  ›  专栏  ›  技术社区  ›  Mike Schall

使用哪家供应商的JDK进行构建重要吗?

  •  12
  • Mike Schall  · 技术社区  · 18 年前

    8 回复  |  直到 18 年前
        1
  •  8
  •   Nathan Feger    18 年前

    我会尽可能使开发工作尽可能接近生产。Ibm和Sun的JDK当然都满足SDK认证,但它们绝不相同。它们的检测和内存管理至少略有不同。如果没有其他问题,JDK中的bug将是不同的,您的代码可能只会在一个场景与另一个场景中绊倒。它也可能只发生在凌晨4点,当月亮是满月的时候,尤其是当你有客人的时候。

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

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

        2
  •  4
  •   entzik    18 年前

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

    然而,JRE之间存在差异。例如,我记得当我使用反射列出一个类的方法或字段时,IBMJRE通常以与Sun不同的顺序将它们提供给我。

        3
  •  3
  •   David G    18 年前

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

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

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

        4
  •  3
  •   jkat    14 年前

        5
  •  2
  •   Mike Deck    18 年前

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

    我建议您使用目标JRE运行所有测试套件,因为供应商之间的运行时行为差异要比编译语义差异大得多。

        6
  •  2
  •   Andreas Bakurov    18 年前

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

        7
  •  1
  •   mransley    18 年前

    长期使用WebSphere之后,JDK的版本非常重要。WebSphere6.1附带了IBMJDK1.5(或者是5)。当您修补WebSphere时,JDK也有相应的修补程序。虽然它可能与不同版本的JDK(甚至是不同的供应商)一起工作,但如果出现问题,我怀疑您是否会得到IBM的大量支持。

    如果您需要一个64位JVM,我建议可能有一个64位的构建,但我不能具体评论windows,我可以告诉您,AIX和Linux都有一个64位WebSphere6.1构建。

        8
  •  0
  •   JeeBee    18 年前

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

    不管怎样,我肯定会把编译平台作为自述文件中的一个要点,这样你的客户就可以看到它是否有问题。

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

    推荐文章