Static block vs static method - inicializando campos estáticos

Por curiosidade, medi o desempenho entre o bloco estático e o inicializador de método estático. Primeiro, implementei os métodos mencionados acima em duas classes java separadas, da seguinte forma:

Primeiro

class Dummy {
    static java.util.List<Integer> lista = new java.util.ArrayList<Integer>();
    static {
        for(int i=0; i < 1000000; ++i) {
            lista.add(new Integer(i));
        }
    }
}

public class First {
    public static void main(String[] args) { 
        long st = System.currentTimeMillis();
            Dummy d = new Dummy();
        long end = System.currentTimeMillis() - st;
        System.out.println(end);    
    }
}

Segundo

class Muddy {
    static java.util.List<Integer> lista = new java.util.ArrayList<Integer>();
    public static void initList() {
        for(int i=0; i < 1000000; ++i) {
            lista.add(new Integer(i));
        }
    }
}

public class Second {
    public static void main(String[] args) { 
        long st = System.currentTimeMillis();
            Muddy.initList();
            Muddy m = new Muddy();
        long end = System.currentTimeMillis() - st;
        System.out.println(end);    
    }
}

Em seguida, executeiest script em lote para medir 100 vezes e colocar os valores em um arquivo.batchFile.bat First Second dum.res.txt

Depois disso, eu escreviestódigo para calcular o valor médio e o desvio padrão dos valores medidos de Dummy e Mudd

Este é o resultado que obtive:

First size: 100 Second size: 100
First       Sum: 132    Std. deviation: 13
Second      Sum: 112    Std. deviation: 9

E é semelhante nas minhas outras máquinas ... toda vez que eu test

Agora estou me perguntando, por que é assim? Eu verifiquei o bytecode e Second.class tem mais uma instrução (chamada para initList estático) entre chamadas para System.currentTimeMillis (). Ambos fazem a mesma coisa, mas por que o primeiro é mais lento? Eu realmente não posso pensar nisso apenas olhando o código de código, já que esta foi minha primeira vez tocando em javap; Ainda não entendo o bytecode.

questionAnswers(2)

yourAnswerToTheQuestion