mais rápido acessar variáveis locais finais do que variáveis de classe em Jav

Estive analisando algumas das coleções primitivas java trove, fastutil, hppc) e notei um padrão de que variáveis de classe às vezes são declaradas comofinal variáveis locais. Por exemplo

public void forEach(IntIntProcedure p) {
    final boolean[] used = this.used;
    final int[] key = this.key;
    final int[] value = this.value;
    for (int i = 0; i < used.length; i++) {
        if (used[i]) {
          p.apply(key[i],value[i]);
        }
    }
}

Fiz alguns testes comparativos e parece que élevement mais rápido ao fazer isso, mas por que isso acontece? Estou tentando entender o que o Java faria diferente se as três primeiras linhas da função fossem comentada

Nota: Isso parece semelhante aessa questã, mas isso era para c ++ e não aborda por que eles são declaradosfinal.