“之间的Java字节码差异”;“满帧”;及;框架附加";

“之间的Java字节码差异”;“满帧”;及;框架附加";,java,bytecode,Java,Bytecode,“帧满”和“帧附加”之间有什么区别? 我选择了两种使用迭代器的方法: 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.

“帧满”和“帧附加”之间有什么区别? 我选择了两种使用迭代器的方法:

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;
}
int size=0;
迭代器it=l.Iterator();
while(it.hasNext()){
字符串s=it.next();
int length=s.length();
尺寸+=长度;
}
int size=0;
for(字符串s:l){
int length=s.length();
尺寸+=长度;
}

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

第一个版本有一个明确的迭代器名称,即多了一个局部变量。这些框架显示局部变量组的开始和结束。我假设full表示它正在描述所有局部变量,append表示它正在添加额外的局部变量。

当操作数堆栈为空且当前局部变量与前一帧中的局部变量相同时,使用帧类型append\u frame,但定义了k个额外的局部变量。框架式全框架是在所有其他类型都不适用时使用的,它也不太紧凑。

这听起来很合理。在这两种情况下,迭代器的生存空间有点不同。