IncompatibleClassChangeError

IncompatibleClassChangeError

是什么原因导致“java.lang.IncompatibleClassChangeError:vtable stub ”?在我们的应用程序中,我们已经看到此错误随机且很少出现(到目前为止只有两次,并且我们经常运行它)。即使使用相同的jvm/jars重新启动应用程序而不重建,它也不容易重现。

至于我们的构建过程,我们清除所有类/jar并重新构建它们,因此这与其他人在一个类中进行了更改而未重新编译其他一些依赖类时遇到的问题不同。

这与与IncompatibleClassChangeError相关的其他一些问题不同-他们都没有提到“vtable stub”。实际上,搜索“IncompatibleClassChangeError“vtable stub”“时,谷歌搜索结果很少。

编辑:

  • 使用JDK 1.6.0_16。
  • 我们没有使用Java序列化。
  • 我们不执行字节码操作。
  • 如前所述,我们正在做一个“干净的构建”,所以以前的构建没有剩余的类。
  • 最佳答案

    JVM字节码世界中的ABI损坏。查找Javadoc:
    “当某些类定义发生不兼容的类更改时抛出。此后,当前执行的方法所依赖的某些类的定义已更改。”

    要寻找的罪魁祸首是对静态最终文字值的更改,因为这些最终文字值会在字节码中被复制为“优化”。编辑:这可以像升级库一样简单,我所知道的唯一解决方法是干净的重建。

    09-28 08:51