Differenza di bytecode Java tra " FRAME FULL "e" FRAME APPEND"


Qual è la differenza tra "FRAME FULL"e" FRAME APPEND"? Controllo 2 modi per usare gli iteratori:

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

Entrambi usano iteratori, ma il bytecode è un po ' diverso.

Author: Dainius, 2011-08-12

2 answers

Il tipo di frame append_frame viene utilizzato quando lo stack degli operando è vuoto e le locals correnti sono le stesse locals del frame precedente, tranne per il fatto che vengono definite k locals aggiuntive. Il tipo di frame full_frame viene utilizzato quando tutti gli altri tipi non sono applicabili, ma è anche meno compatto.

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

La prima versione ha un nome iteratore esplicito, cioè un'altra variabile locale. I fotogrammi mostrano l'inizio e la fine di gruppi di variabili locali. Presumo che full significhi che sta descrivendo tutte le variabili locali, append significa che sta aggiungendo ulteriori variabili locali.

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