Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解码netty通道缓冲区时遇到java.lang.CompatibleClassChangeError:vtable存根_Java_Jvm_Netty - Fatal编程技术网

解码netty通道缓冲区时遇到java.lang.CompatibleClassChangeError:vtable存根

解码netty通道缓冲区时遇到java.lang.CompatibleClassChangeError:vtable存根,java,jvm,netty,Java,Jvm,Netty,在我们的应用程序中,我们看到“java.lang.CompatibleClassChangeError:vtable存根”随机出现,而且很少出现。我们进行了干净的重建,因此构建环境中的nettyjar文件与运行环境中的文件相同 代码是: @Override protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws CorruptedFrameExcept

在我们的应用程序中,我们看到“java.lang.CompatibleClassChangeError:vtable存根”随机出现,而且很少出现。我们进行了干净的重建,因此构建环境中的nettyjar文件与运行环境中的文件相同

代码是:

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer)
    throws CorruptedFrameException
{
    ...
    buffer.readShort();            
    int subLength = buffer.readShort();
    ...
}
第一个buffer.readShort()工作正常,但第二个buffer.readShort()可能会随机抛出此错误。问题类似于。它使用JDK1.6.0_16运行,看起来还没有解决

  • 我们使用的是ARMV7CPU
  • Netty版本是3.5.4
  • java版本是

    0101C2:~ # java -version
    java version "1.8.0_65"
    Java(TM) SE Embedded Runtime Environment (build 1.8.0_65-b17, headless)
    Java HotSpot(TM) Embedded Client VM (build 25.65-b01, mixed mode)
    
更新:

  • 它与-Xint选项配合使用效果很好:我测试了很多次,不兼容的ClassChangeError在没有-Xint的情况下发生了20多次,而在使用-Xint的情况下则从未发生过。每次测试我用-Xint重启应用程序3次,然后不用-Xint重启应用程序3次

如果您正在部署应用程序的新版本,您是如何做到的?鉴于这是JVM的ARM构建,我怀疑这可能是JVM错误。问题是否会在
-Xint
中重现?@Ferrybig I使用JDK 1.8.065在X86 Linux操作系统中从源代码构建Netty和我们的应用程序,并将所有jar文件复制到使用JRE 1.8.0的arm Linux操作系统中_65@apangin使用-Xint,问题不会重现。奇怪的是,如果我添加logger.debug(“buffer:+buffer”),问题也不会重现;在buffer.readShort()之前。