gpt4 book ai didi

java - 未使用的局部变量 Java 8 - java.lang.VerifyError : Inconsistent stackmap frames

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:39 28 4
gpt4 key购买 nike

我最近将我的项目从 Java 1.7 升级到 Java 1.8。

我的一个类中的某个方法出现堆栈映射不一致的异常。

在方法中初始化一些未分配的局部变量解决了它,但有人可以解释为什么在 Java 8 中使用未读变量会引发异常,谢谢。

它可能与正在使用的 eclipse 版本 (Kepler SR 2 20140224-0627) 一起使用,只是好奇。

解决方法

  1. 之前在修复错误代码之前使用“--xxSplitVerifier”(在 1.7 中)或“-noVerify”Jvm 参数。

  2. 如果 eclipse 工作区中的编译器首选项未选中“保留未使用的局部变量”选项,则它可以在 java 8 中正常编译

方法:

无法发布完整的方法,因为它是我所在公司的非常大且受限制的代码。

public synchronized int setData()  //sample code 
{
int id= 0;
StringBuffer sb; // works if initialized - stringBuffer sb = null;
String name; // works if name = null

if (true) {
sb = new StringBuffer();
} else {
sb = new StringBuffer();
}

堆栈框架:

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

异常详细信息:位置: someClass.setData(someClass/Data)I @2079: iload_3

原因: 类型 top (current frame, locals[4]) is not assignable to 'java/lang/StringBuffer' (stack map, locals[4])

当前帧: bci: @98 标志:{} locals: { 'someClass/setData', 'someClass/Data', 'someClass/Data', integer, top, top } 堆栈:{'someClass/Data'}

堆栈图框架: bci: @2079 标志:{} locals: { 'someClass/setData', 'someClass/Data', 'someClass/Data', integer, 'java/lang/StringBuffer', 'java/lang/String'} 堆栈:{} 字节码: 0x0000000: 2bb6 032b 4d03 3e06 bd01 3e59 0313 032f 0x0000010: 5359 0413 0331 5359 0513 0333 533a 0606

最佳答案

假设您正在使用 OpenJDK - 很可能您遇到了编译器错误 JDK-8160699 .然后解决方案是升级到更新的 JDK 版本。

关于java - 未使用的局部变量 Java 8 - java.lang.VerifyError : Inconsistent stackmap frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40534048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com