“FRAME FULL”和“FRAME APPEND”之间的Java字节码差异

时间:2011-08-12 11:18:20

标签: java bytecode

“FRAME FULL”和“FRAME APPEND”之间有什么区别? 我检查了两种使用迭代器的方法:

int size = 0;
Iterator<String> it = l.iterator();
while (it.hasNext()) {
    String s = it.next();
    int length = s.length();
    size += length;
}

int size = 0;
for (String s : l) {
        int length = s.length();
        size += length;
}

他们都使用迭代器,但字节码有点不同。

2 个答案:

答案 0 :(得分:2)

当操作数堆栈为空且当前局部变量与前一帧中的局部变量相同时,使用帧类型append_frame,除了定义了k个其他局部变量。当所有其他类型都不适用时,使用帧类型full_frame,它也不那么紧凑。

答案 1 :(得分:1)

第一个版本有一个显式的迭代器名称,即一个局部变量。框架显示局部变量组的开始和结束。我假设完全意味着它描述了所有局部变量,追加意味着它正在添加额外的局部变量。