27 January 2015

Производительность ArrayList.toArray(...)

Копия бенчмарка тут. Если вкратце, то:

  • ArrayList.toArray() - самый быстрый, так как создается Object[], а далее происходит копирование с помощью векторной инструкции AVX. Никаких проверок на совместимость типов.
  • ArrayList.toArray(new T[size]) - намного медленнее чем toArray(), так как здесь копирование происходит поэлементно из за проверки типов.
  • ArrayList.toArray(new T[0]) - что самое интересное быстрее, чем если бы мы передали преалоцированный массив нужного размера toArray(new T[size]). Причиной этому является тот факт, что когда мы передаем готовый массив, то JVM необходимо проинициализировать его null'овыми значениями (иначе говоря, обнулить). В случае когда мы передаем массив нулевого размера, то JVM сама создаст массив нужно размера и заполнит элементами из ArrayList, таким образом его не придется "обнулять".

No comments:

Post a Comment