Статический блок и статический метод - инициализация статических полей

Из любопытства я измерил производительность между статическим блоком и инициализатором статического метода. Сначала я реализовал вышеупомянутые методы в двух отдельных java-классах, например:

Первый:

class Dummy {
    static java.util.List lista = new java.util.ArrayList();
    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);    
    }
}

Второй:

class Muddy {
    static java.util.List lista = new java.util.ArrayList();
    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);    
    }
}

Затем я выполнил этот небольшой пакетный скрипт, чтобы измерить его 100 раз и поставить значения в файле. batchFile.bat Первая секунда dum.res.txt

После этого я написал этот фрагмент кода для вычисления среднего значения и стандартного отклонения измеренных значений Dummy и Muddy.

Это результат, который у меня есть:

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

И он похож на других моих машинах ... каждый раз, когда я его тестирую.

Теперь мне интересно, почему это так? Я проверил байт-код, и у Second.class есть еще одна инструкция (вызов static initList ()) между вызовами System.currentTimeMillis (). Они оба делают одно и то же, но почему Первый медленнее? Я не могу понять это, просто взглянув на байт-код, поскольку это был мой первый раз, когда я касался javap ; Я пока не понимаю байт-код.

8
задан nullpotent 21 November 2011 в 11:22
поделиться