运行32位java和64位java会产生不同的结果

运行32位java和64位java会产生不同的结果,java,jaxb,32bit-64bit,Java,Jaxb,32bit 64bit,我正在运行jaxbxjc代码生成器(v2.2.4-1),它可以在32位linux和32位java上正常工作。但当我在64位linux上运行它时,我会得到如下结果: Exception in thread "main" java.lang.IllegalArgumentException: Illegal class inheritance loop. Outer class ProductSectionProperty may not subclass from inner cl

我正在运行jaxbxjc代码生成器(v2.2.4-1),它可以在32位linux和32位java上正常工作。但当我在64位linux上运行它时,我会得到如下结果:

Exception in thread "main" java.lang.IllegalArgumentException:
    Illegal class inheritance loop.
    Outer class ProductSectionProperty may not subclass from inner class: ProductSectionProperty
在这两种情况下,我都使用Oracle的JDK1.6.0_24

为了解决这个问题,我尝试了:

  • 在64位机器上使用32位java
  • 指定-XX:+UseCompressedOops
  • 指定-XX:-UseCompressedOops当我意识到上面是默认值时
但结果是一样的

你知道为什么会这样,或者下一步该怎么做吗

你知道为什么会这样,或者下一步该怎么做吗

1) 没有

2) 我会暂时忽略32对64的问题,看看你是否可以用不同的方法解决这个问题。我在谷歌上搜索了“非法类继承循环”这条消息,而且点击率很高。尝试扫描它们,看看症状/根本问题/解决方案是否适用于您的案例


(我找不到这方面的Java bug,但根据我的经验,Java bug搜索效果不好…

我会尝试Java 6 update 26,因为它听起来像个bug。要么两者都能起作用,要么两者都会失败。您还可以尝试Java7,看看它的行为是否与Oracle相同(即使您不打算使用它),因为Java显然不是那么可移植。您可以尝试不同的JVM,IBM或JRockit将是主要选择。Steve-o谢谢!我尝试了IBM的JDK,它在两个系统上都能工作。可能的重复:@ivant-你能为这个问题输入一个bug吗:我也尝试了这个方法,但由于生成的类是一个相当大的项目的一部分,我把“修复”模式/绑定作为最后的手段。无论如何,JVM的行为会如此不同,这让我感到困扰。我唯一能想到的是,较长的地址可能会以某种方式产生比JAXB代码预期的更大的散列。但是看起来不太可能,因为hashCode方法仍然返回“int”。我浏览了JAXB包的源代码,没有发现任何可疑的hashCode/equals方法。