Caused by: java.lang.VerifyError: Inconsistent stackmap frames at branch target 177

用的JDK7,今天Git新pull下项目Myeclipse用Tomcat7启动时报异常:Caused by: java.lang.VerifyError: Inconsistent stackmap frames at branch target 177

Caused by: java.lang.VerifyError: Inconsistent stackmap frames at branch target 177
Exception Details:
  Location:
    com/neusoft/intf/shake/service/impl/ShakeServiceImpl.checkUserQualification(Ljava/util/Map;)Ljava/util/Map; @177: ldc
  Reason:
    Type top (current frame, locals[7]) is not assignable to 'java/lang/String' (stack map, locals[7])
  Current Frame:
    bci: @167
    flags: { }
    locals: { 'com/neusoft/intf/shake/service/impl/ShakeServiceImpl', 'java/util/Map', integer, integer, integer, integer, 'java/lang/String', top, 'java/lang/String', 'java/util/HashMap', top, integer, top, top, top, top, 'java/util/HashMap' }
    stack: { integer }
  Stackmap Frame:
    bci: @177
    flags: { }
    locals: { 'com/neusoft/intf/shake/service/impl/ShakeServiceImpl', 'java/util/Map', integer, integer, integer, integer, 'java/lang/String', 'java/lang/String', 'java/lang/String', 'java/util/Map', top, integer, top, top, top, top, 'java/util/Map' }
    stack: { }
  Bytecode:
    0000000: 2a2b b601 993d 033e 0336 0403 3605 013a
    0000010: 06bb 0054 59b7 0056 3a09 2ab4 0032 2bb9
    0000020: 019c 0200 360b 150b 9a00 c513 01a0 3a06
    0000030: 1909 1279 126f b900 7b03 0057 1909 1301
    0000040: a219 06b9 007b 0300 5719 0912 7f13 01a4
    0000050: b900 7b03 0057 1909 1301 a603 b801 a8b9
    0000060: 007b 0300 5719 0913 01ab 03b8 01ad b900
    0000070: 7b03 0057 1909 3a10 2ab4 0038 1906 2b12
    0000080: 57b9 0059 0200 b600 5fb9 0073 0300 3a08
    0000090: 1909 1301 ab1d b801 adb9 007b 0300 5713
    00000a0: 01b2 1906 b601 1a99 000a 1271 3a07 a700
    00000b0: 0712 6f3a 0719 0912 7919 07b9 007b 0300
    00000c0: 5719 0913 01a2 1906 b900 7b03 0057 1909
    00000d0: 127f 1908 b900 7b03 0057 1909 1301 a615
    00000e0: 05b8 01a8 b900 7b03 0057 1910 b0bb 0054
    00000f0: 59b7 0056 3a0d bb00 5459 b700 563a 0e19
    0000100: 0d13 01b4 1301 b6b9 007b 0300 572a b400
    0000110: 4c19 0db9 01b8 0200 3a0e 190e 1301 bdb9
    0000120: 0059 0200 b600 5f3a 0c13 01bf 190c b601
    0000130: 1a99 00d1 1301 c13a 062a b400 3819 062b
    0000140: 1257 b900 5902 00b6 005f b900 7303 003a
    0000150: 0812 6f3a 0719 0912 7919 07b9 007b 0300
    0000160: 5719 0913 01a2 1906 b900 7b03 0057 1909
    0000170: 127f 1908 b900 7b03 0057 1909 1301 a603
    0000180: b801 a8b9 007b 0300 5719 093a 102a b400
    0000190: 3819 062b 1257 b900 5902 00b6 005f b900
    00001a0: 7303 003a 0819 0913 01ab 1db8 01ad b900
    00001b0: 7b03 0057 1301 b219 06b6 011a 9900 0a12
    00001c0: 713a 07a7 0007 126f 3a07 1909 1279 1907
    00001d0: b900 7b03 0057 1909 1301 a219 06b9 007b
    00001e0: 0300 5719 0912 7f19 08b9 007b 0300 5719
    00001f0: 0913 01a6 1505 b801 a8b9 007b 0300 5719
    0000200: 10b0 2a2b b601 c33a 0a19 0a13 01a6 b900
    0000210: 5902 00c0 0113 b601 c636 0519 0a13 01c9
    0000220: b900 5902 00c0 0113 b601 c69e 0007 04a7
    0000230: 0004 0336 041c 9900 1015 049a 000b 1301
    0000240: cb3a 06a7 0046 1505 9e00 392a 2bb6 01cd
    0000250: 3e1d 9900 0a12 6f3a 06a7 0030 1301 d02b
    0000260: 1301 0ab9 0059 0200 b600 5fb6 011a 9900
    0000270: 0b13 01d2 3a06 a700 1313 01d4 3a06 a700
    0000280: 0b03 3605 1301 d63a 06b2 0021 1301 d8b9
    0000290: 016a 0200 a701 253a 0b12 713a 06b2 0021
    00002a0: bb01 3059 1301 dab7 0132 190b b601 71b6
    00002b0: 0135 1301 74b6 0135 190b b601 76b6 017a
    00002c0: b601 39b9 017d 0200 190b b600 832a b400
    00002d0: 3819 062b 1257 b900 5902 00b6 005f b900
    00002e0: 7303 003a 0819 0913 01ab 1db8 01ad b900
    00002f0: 7b03 0057 1301 b219 06b6 011a 9900 0a12
    0000300: 713a 07a7 0007 126f 3a07 1909 1279 1907
    0000310: b900 7b03 0057 1909 1301 a219 06b9 007b
    0000320: 0300 5719 0912 7f19 08b9 007b 0300 5719
    0000330: 0913 01a6 1505 b801 a8b9 007b 0300 57a7
    0000340: 00ec 3a0f 2ab4 0038 1906 2b12 57b9 0059
    0000350: 0200 b600 5fb9 0073 0300 3a08 1909 1301
    0000360: ab1d b801 adb9 007b 0300 5713 01b2 1906
    0000370: b601 1a99 000a 1271 3a07 a700 0712 6f3a
    0000380: 0719 0912 7919 07b9 007b 0300 5719 0913
    0000390: 01a2 1906 b900 7b03 0057 1909 127f 1908
    00003a0: b900 7b03 0057 1909 1301 a615 05b8 01a8
    00003b0: b900 7b03 0057 190f bf2a b400 3819 062b
    00003c0: 1257 b900 5902 00b6 005f b900 7303 003a
    00003d0: 0819 0913 01ab 1db8 01ad b900 7b03 0057
    00003e0: 1301 b219 06b6 011a 9900 0a12 713a 07a7
    00003f0: 0007 126f 3a07 1909 1279 1907 b900 7b03
    0000400: 0057 1909 1301 a219 06b9 007b 0300 5719
    0000410: 0912 7f19 08b9 007b 0300 5719 0913 01a6
    0000420: 1505 b801 a8b9 007b 0300 5719 09b0     
  Exception Handler Table:
    bci [26, 120] => handler: 663
    bci [237, 397] => handler: 663
    bci [514, 660] => handler: 663
    bci [26, 120] => handler: 834
    bci [237, 397] => handler: 834
    bci [514, 717] => handler: 834
  Stackmap Table:
    full_frame(@177,{Object[#1],Object[#90],Integer,Integer,Integer,Integer,Object[#148],Object[#148],Object[#148],Object[#90],Top,Integer,Top,Top,Top,Top,Object[#90]},{})
    same_frame(@181)
    full_frame(@237,{Object[#1],Object[#90],Integer,Integer,Integer,Integer,Object[#148],Top,Top,Object[#90],Top,Integer},{})
    full_frame(@454,{Object[#1],O
bject[#90],Integer,Integer,Integer,Integer,Object[#148],Object[#148],Object[#148],Object[#90],Top,Integer,Object[#148],Object[#90],Object[#90],Top,Object[#90]},{})
    same_frame(@458)
    full_frame(@514,{Object[#1],Object[#90],Integer,Integer,Integer,Integer,Object[#148],Top,Top,Object[#90],Top,Integer,Object[#148],Object[#90],Object[#90]},{})
    full_frame(@562,{Object[#1],Object[#90],Integer,Integer,Integer,Integer,Object[#148],Top,Top,Object[#90],Object[#90],Integer,Object[#148],Object[#90],Object[#90]},{})
    same_locals_1_stack_item_frame(@563,Integer)
    same_frame(@582)
    same_frame(@604)
    same_frame(@633)
    same_frame(@638)
    same_frame(@641)
    same_frame(@649)
    full_frame(@663,
	... 

网上查询了一下 在树上唱歌写的:https://www.cnblogs.com/zhangcybb/p/4897417.html

操作步骤:MyEclipse开发窗口->Window->Preferences->java->Installed JREs->单击选中JDK7->单击右侧Edit...->在Default VM Arguments处追加上VM options :  -XX:-UseSplitVerifier(若是原来有值追加前加一个空格)

解决方法:

    加上VM options :  -XX:-UseSplitVerifier

解决完成。

网上写的不完全对,但是这种方法解决了我的问题,研究比较深的伙伴们有什么新的见解可以在下面评论,一起进步,谢谢。

参数资料:

    http://stackoverflow.com/questions/12774672/java-7-inconsistent-stackmap-frames-need-help-understanding-why-solution-wor

    http://stackoverflow.com/questions/7970622/java-7-jvm-verifyerror-in-eclipse

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=353467

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=353467#c3

    http://stackoverflow.com/questions/8079504/akka-actors-fails-verifyerror-inconsistent-stackmap-frames-at-branch-target

    http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

原因分析:
    报异常的方法内使用了Java 7的新特性:自动资源释放,类似于try(){},即在try后面跟一括号,在括号里面对一些资源赋值,try里面的代码块执行完毕之后会自动释放try后面的括号中声明的资源。
  Java 7 会使用新的Class类型校验器,新的类型校验器将老的校验器分为两步:
      1、类型推断
      2、类型校验
    新的类型校验器通过在javac编译时嵌入类型信息到bytecode中,省略了类型推断这一步,从而提升了classloader的性能。  
  Classload顺序(供参考)
       load -> verify -> prepare -> resove -> init
  
  -XX:+UseSplitVerifier
  Enables splitting of the verification process. By default, this option was enabled in the previous releases, and verification was split into two phases: type referencing (performed by the compiler) and type checking (performed by the JVM runtime). This option was deprecated in JDK 8, and verification is now split by default without a way to disable it.
 
    As of Java 7, compiled bytecode has to contain additional StackMapTable attributes. These help the verifier inside the JVM to check that classes are soundly constructed, at class loading time. Earlier versions of Java are more lenient, falling back on the slower verification without attributes.
Tools that modify the original compiled bytecode (ProGuard right after the compilation, AOP frameworks right before the execution,...) need to update the attributes consistently with the modified code. If they fail to do so, you'll get the error message "Inconsistent stackmap frames".
ProGuard should perform this preverification fine; I'm not aware of any problems with it. If you still see the error without applying ProGuard, the problem must lie with the DI or AOP.

网上写的不完全对,但是这种方法解决了我的问题,研究比较深的伙伴们有什么新的见解可以在下面评论,一起进步,谢谢。

你可能感兴趣的:(异常)