java - 是什么原因导致 "java.lang.IncompatibleClassChangeError: vtable stub"?

标签 java runtime vtable

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

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

这与与 IncompatibleClassChangeError 相关的其他一些问题不同——它们都没有提到“vtable stub ”。事实上,在搜索“IncompatibleClassChangeError “vtable stub””时,谷歌搜索结果出乎意料的少。

编辑:

  • 使用 JDK 1.6.0_16。
  • 我们没有使用 Java 序列化。
  • 我们不进行字节码操作。
  • 如前所述,我们正在进行“干净的构建”,因此没有从之前的构建中遗留下来的类。

最佳答案

JVM 字节码世界中的 API 损坏。查找 Javadoc :

Thrown when an incompatible class change has occurred to some class definition. The definition of some class, on which the currently executing method depends, has since changed.

要寻找的罪魁祸首是对静态最终文字值的更改,因为这些值在字节代码中被复制为“优化”。

编辑:这可以像库升级的结果一样简单,我所知道的唯一修复方法是干净重建。

关于java - 是什么原因导致 "java.lang.IncompatibleClassChangeError: vtable stub"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041032/

相关文章:

java - Android MVC 设计模式

java - 在hadoop/级联中处理UTF-16LE编码的文件

javascript - JS 在函数运行时使用字符串调用函数

c++ - 在常见基类型系列中获取整数类型 ID 的最有效方法

c++ - 如果将对象转换为实际类型,使用虚函数是否有任何成本?

java - oracle中三串列的公共(public)子串合并

java - 使整数始终保持在 0 - 100 之间

c++ - 虚函数机制引用虚构造函数

c++ - VCRUNTIME140_1.dll报告丢失,尽管已卸载VCRuntime 2015-2019并重新安装了VCRuntime 2015

java - Java如何在单独的进程树中执行批处理文件