Разница в байт-коде Java между "FRAME FULL" и "FRAME APPEND" - PullRequest
2 голосов
/ 12 августа 2011

В чем разница между "FRAME FULL" и "FRAME APPEND"?Я проверяю 2 способа использования итераторов:

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 ]

2 голосов
/ 12 августа 2011

Тип фрейма append_frame используется, когда стек операндов пуст, а текущие локальные значения совпадают с локальными в предыдущем кадре, за исключением того, что определены k дополнительных локальных элементов. Тип кадра full_frame используется, когда все другие типы неприменимы, он также менее компактен.

1 голос
/ 12 августа 2011

Первая версия имеет явное имя итератора, то есть еще одну локальную переменную.Кадры показывают начало и конец группы локальных переменных.Я предполагаю, что полный означает, что он описывает все локальные переменные, добавление означает, что он добавляет дополнительные локальные переменные.

...