- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JVM 加载字节码期间遇到此 java.lang.VerifyError,代码片段如下。
try{
-----
} catch (NumberFormatException|CalculationException e) {
}
这里CalculationException是扩展java.lang.RuntimeException的自定义异常,而NumberFormatException是标准的Java RuntimeException。虽然代码在本地 Windows 机器上编译并运行良好。
它在 QA/prod/Dev unix 节点之一上失败并出现VerifyError,但在其他 unix 节点上工作正常。虽然两个unix节点具有相同的配置(使用RedHat 6.2和1.8 jdk以及相同版本的jar文件),但也比较了javap -c在两个节点上生成的字节码,发现这是相同的。
我还发现了两种方法可以在错误的节点上解决此问题。
1) 由于此错误是在字节码验证步骤中出现的,因此尝试通过禁用 dev unix 框上的字节码验证为 -Xverify:none (也尝试过 -XX:-UseSplitVerifier 但不起作用,因为我认为它被禁用了JDK 8)然而,由于我们不会在产品中禁用字节码验证,因此一直在寻找其他一些解决方法。
2) 另一种解决方法是在 catch block 中使用父异常:RuntimeException,而不是组合两个异常。
我无法理解Java是否确实存在这种捕获方式的问题,为什么编译器会提示它以及为什么它在一台机器上运行而不是在具有相同配置的其他机器上运行。此外,错误原因没有意义,它表示:CalculationException (当前帧,堆栈[0]) 不可分配给 'java/lang/RuntimeException虽然它实际上是可分配的,经测试
if (RuntimeException.class.isAssignableFrom(CalculationException.class)){
System.out.println("Assisgnable");
}
完整的异常详细信息: 地点:
com/markit/valuations/marketdata/snapper/domain/credit/BeanWrapperBuilder_CDXOCompositeVolSurface.getSpreadVol(Lcom/markit/valuations/dates/ImmutableDate;Lcom/markit/valuations/marketdata/data/indexeddata/IndexedData;DLcom/markit/valuations/dates/ImmutableDate;Lcom/markit/valuations/dates/ImmutableDate;Ljava/lang/String;Ljava/lang/String;Lcom/markit/qag/analytics/credit/indexpv/swaption/CreditIndexSwaptionCalculator;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Double; @51: astore
Reason:
Type 'com/markit/valuations/common/CalculationException' (current frame, stack[0]) is not assignable to 'java/lang/RuntimeException' (stack map, stack[0])
Current Frame:
bci: @0
flags: { }
locals: { 'com/markit/valuations/marketdata/snapper/domain/credit/BeanWrapperBuilder_CDXOCompositeVolSurface', 'com/markit/valuations/dates/ImmutableDate', 'com/markit/valuations/marketdata/data/indexeddata/IndexedData', double, double_2nd, 'com/markit/valuations/dates/ImmutableDate', 'com/markit/valuations/dates/ImmutableDate', 'java/lang/String', 'java/lang/String', 'com/markit/qag/analytics/credit/indexpv/swaption/CreditIndexSwaptionCalculator', 'java/lang/String', 'java/lang/String' }
stack: { 'com/markit/valuations/common/CalculationException' }
Stackmap Frame:
bci: @51
flags: { }
locals: { 'com/markit/valuations/marketdata/snapper/domain/credit/BeanWrapperBuilder_CDXOCompositeVolSurface', 'com/markit/valuations/dates/ImmutableDate', 'com/markit/valuations/marketdata/data/indexeddata/IndexedData', double, double_2nd, 'com/markit/valuations/dates/ImmutableDate', 'com/markit/valuations/dates/ImmutableDate', 'java/lang/String', 'java/lang/String', 'com/markit/qag/analytics/credit/indexpv/swaption/CreditIndexSwaptionCalculator', 'java/lang/String', 'java/lang/String' }
stack: { 'java/lang/RuntimeException' }
Bytecode:
0x0000000: 2c19 0ab9 0015 0200 b800 cb2b 1906 ba00
0x0000010: cc00 00b6 00cd ba00 ce00 00b6 00cf 1909
0x0000020: ba00 d000 00b6 00cf 0eb8 003b b600 d1c0
0x0000030: 0091 b03a 0cbb 0048 59b7 0049 12d3 b600
0x0000040: 4b19 0ab6 004b 12d4 b600 4b2c 1254 b900
0x0000050: 1502 00b6 004b 12d5 b600 4b29 b600 4c12
0x0000060: d6b6 004b 1907 b600 4b12 d7b6 004b 1905
0x0000070: b600 5b12 d8b6 004b 1906 b600 5b12 d9b6
0x0000080: 004b 190b b600 4b12 dab6 004b 1908 b600
0x0000090: 4bb6 004d 3a0d b200 4719 0d19 0cb9 0081
0x00000a0: 0300 0eb8 003b b0
Exception Handler Table:
bci [0, 50] => handler: 51
bci [0, 50] => handler: 51
Stackmap Table:
same_locals_1_stack_item_frame(@51,Object[#535])
最佳答案
当我的依赖项中同一库 (Jar) 的版本存在冲突时,就会发生这种情况。更具体地说,我导入了不同版本的 Jackson 库 v2.9.10 和 v2.11.0。
以详细模式启动应用程序,并让 java 记录它正在加载的所有类,以查看冲突的类来自何处。这可以通过传递标志 -verbose:class
来完成。
mvn dependency:tree
后您也没有看到任何冲突的依赖项或 Maven Helper 插件,冲突的依赖项可能已由库的类路径之一导入。我知道这听起来很奇怪,因为只有应用程序应该有类路径,但如果有人添加 <addClasspath>true</addClasspath>
在他们的库 pom 文件中,可能会导致这种情况。关于java.lang.VerifyError : Stack map does not match the one at exception handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54804355/
在我的应用中,我使用 IntentService 发送短信。 @Override protected void onHandleIntent(Intent intent) { Bund
Handler(android.os.Handler.Callback) 已弃用,我应该改用什么? Handler handler = new Handler(new Handler.Callback
机器人Handler类包含此方法: public final boolean postAtTime (Runnable r, Object token, long uptimeMillis) 在给定时
我不明白怎么用这个方法, sensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate, H
请告诉我 handler.postAtTime 和 handler.postDelayed 在 android 中的区别,也请指导我何时使用 handler.postAtTime 以及何时使用 han
我有以下代码。 function myFun() { alert(5) } $(document).ready(fu
我有this jsfiddle 它使用 toggle event - 不要与 toggle 混淆- jQuery 版本设置为 EDGE 它突然停止工作并删除了我想要作为触发器的单元格,因为它显然恢复为
在我的应用程序中,我定义了一个自定义事件,我希望为其设置默认处理程序。如果任何 Controller /服务想要覆盖默认处理,他们可以通过添加自己的处理程序来实现。 为了实现这个场景,我在 $root
我在我的网页中使用了 jquery .toggle(between two functions) : $( ".cpUpbtnsclass" ).toggle(function() { c
我有this jsfiddle 它使用 toggle event - 不要与 toggle 混淆- jQuery 版本设置为 EDGE 它突然停止工作并删除了我想要作为触发器的单元格,因为它显然恢复为
我浏览了官方文档,但我似乎找不到 new Handler() 之间是否有任何区别和new Handler(Looper.myLooper()) new Handler() Default constr
当我在 faces-config.xml 文件中添加以下行时: " com.sun.facelets.FaceletViewHandler " eclipse 说: " view-handler re
当我使用 Handler.dispatchMessage(msg) 时,handleMessage(Message msg) 将在新线程上运行,但是当我使用 Handler.sendMessage(
如何禁用当前将模态库导航到下一张图像的鼠标滚轮处理程序和键盘箭头键? 这里是演示站点:http://blueimp.github.com/Bootstrap-Image-Gallery/ . 如果您单
我正在尝试关注 this关于 Win32 结构化异常处理的文章。这篇文章很老了,但仍然被认为是对该主题的一个很好的介绍。 我正在尝试从下面转载的文章中编译代码示例 - //==============
我正在尝试使用 HibernateValidator 使用 Spring 和 Hibernate 在 JSP 中验证一个简单的表单. JSP页面Temp.jsp如下(web.xml中的url ptte
问题几乎概括了它。我错误地导入了 java.util.logging 并且没有获得所需的功能。现在我解决了我的问题,但我想知道为什么 android 创建了两个 Handler 。我们可能会错误地导入
我有一个主页,其中有一个链接按钮。在其中一个内容页面中,我需要隐藏链接按钮并替换为图像按钮。图像按钮的单击事件处理程序应该与母版页中链接按钮的单击事件完全相同。那么有没有办法从内容页面中的图像按钮单击
我有一个用 2.5 编写的现有 Spring MVC 应用程序。 我想使用新的注释 Controller 。我在某种程度上发现它非常灵活并且可以满足我的其他需求。 我的问题是,我似乎无法将它们两者混合
使用最新的 XCode,我收到此错误: 'logInWithReadPermissions(_:handler:)' is deprecated: use logInWithReadPermissi
我是一名优秀的程序员,十分优秀!