定位:java.lang.VerifyError: Stack map does not match the one at exception的莫名错误

本文介绍了一种常见的Java运行时错误——VerifyError,并提供了详细的解决步骤。通常,此错误与JVM字节码验证有关,尤其是在使用动态生成class文件的框架时更为常见。文章最后给出了通过配置JVM参数-noverify来禁用字节码验证的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于错误

不说废话,直接上错误图:
在这里插入图片描述
然后就去各种定位,搜索这个错误,都没查出个所以然来,然后往下翻,看到一堆莫名其妙的输出日志:
在这里插入图片描述
我总觉得这是个突破口,然后就从这个方向去搜,终于找到了问题所在。

问题原因

JVM加载class文件时会做字节码校验(bytecode verification)。如果你的class文件是由java源文件通过javac编译出来的,那么基本上不用担心bytecode verification。 如果class文件是由asm、cglib等动态生成出来的或者由其它编译器生成的,那么JVM在校验它的bytecode时就有可能失败。 失败的原因可能是你生成的bytecode有bug,也可能是由于新版本的JVM加入了新的验证条件后导致原来可以通过验证的bytecode现在不能通过了。

很多Java框架都会动态生成class文件,再加上JVM版本也会时不时地修改它的bytecode verification行为。 所以,运行代码时偶尔会遇到java.lang.VerifyError错误。 在不能修改框架代码或者切换JVM实现的情况下,JVM提供了一些选项可以让你改变或者绕过bytecode verification。

解决方法:

在VM中配置一个参数:
-noverify
在这里插入图片描述

保存后再次运行,
在这里插入图片描述
成功解决,这里感谢:
https://blog.csdn.net/crxk_/article/details/103196146
特此记录,以备后续查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值