newInstance () против нового - PullRequest
       9

newInstance () против нового

26 голосов
/ 15 марта 2009

Есть ли штраф за вызов newInstance () или это тот же механизм внизу? Сколько накладных расходов, если таковые имеются, у newInstance () над новым ключевым словом *?

*: не учитывать тот факт, что newInstance () подразумевает использование отражения.

Ответы [ 3 ]

16 голосов
/ 15 марта 2009

В реальном тесте создание 18129 экземпляров класса с помощью «Constuctor.newInstance» с передачей 10 аргументов -vs- создание экземпляров с помощью «new» не потребовало заметной разницы во времени.

Это не был какой-то микро тест.

Это с JDK 1.6.0_12 в бета-версии Windows 7 x86.

Учитывая, что Constructor.newInstance будет очень похож на Class.forName.newInstance, я бы сказал, что издержки вряд ли что-то, учитывая функциональность, которую вы можете получить, используя newInstance вместо new.

Как всегда, вы должны проверить это сами, чтобы увидеть.

1 голос
/ 15 марта 2009

Остерегайтесь микробенчмарков, но я нашел эту запись в блоге , где кто-то обнаружил, что new был примерно в два раза быстрее, чем newInstance с JDK 1.4. Похоже, что есть разница, и, как и ожидалось, отражение медленнее. Тем не менее, похоже, что разница не может быть решающей, в зависимости от частоты появления новых объектов и объема вычислений.

0 голосов
/ 31 августа 2013

Есть разница - в 10 раз. Абсолютная разница незначительна, но если ваше приложение с малой задержкой записи накопленное время процессора может быть значительным.

    long start, end;
    int X = 10000000;
    ArrayList l = new ArrayList(X);
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        String.class.newInstance();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

    l.clear();
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        new String();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

Выход:

T: 105
T: 11

Проверено на Xeon W3565 @ 3,2 ГГц, Java 1,6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...