Différence de bytecode Java entre "FRAME FULL" et "FRAME APPEND"


Quelle est la différence entre" FRAME FULL "et"FRAME APPEND"? Je vérifie 2 façons d'utiliser les itérateurs:

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;
}

Ils utilisent tous les deux des itérateurs, mais le bytecode est un peu différent.

Author: Dainius, 2011-08-12

2 answers

Le type de trame append_frame est utilisé lorsque la pile d'opérandes est vide et que les sections locales actuelles sont les mêmes que les sections locales de la trame précédente, sauf que k sections locales supplémentaires sont définies. Le type de trame full_frame est utilisé lorsque tous les autres types ne sont pas applicables, il est également moins compact.

 2
Author: Eugene Kuleshov, 2011-08-12 11:25:03

La première version a un nom d'itérateur explicite, c'est-à-dire une variable locale de plus. Les cadres montrent le début et la fin des groupes de variables locales. Je suppose que full signifie qu'il décrit toutes les variables locales, append signifie qu'il ajoute des variables locales supplémentaires.

 1
Author: Peter Lawrey, 2011-08-12 11:24:35