![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Недавно прочитал на одном из англоязычных форумов, что clone() в приложении к массиву действует даже быстрее чем System.arraycopy и Arrays.copyOf.
Взял да сдуру и поверил. В новом проекте использовал сlone массивов на каждом шагу. Сегодня при запуске нового метода классификации получл невероятное время работы (крайне медленно). Полез смотреть, что тормозит и обнаружил, что из 134 секунд работы метода 83 секунды ушло на клонирование, и только 38 секунд на умножение векторов на матрицы (не очень большие 75х75). С умножением векторов на матрицы я пока сделать ничего не могу, оно необходимо, а вот затраты на clone повергли меня в ужас и подвигли на небольшой эксперимент. Следующий код
дал убойные результаты (старшие три цифры - миллисекунды): Clone 477,566,722.00 System.arraycopy 249,563,929.00 Arrays.copyOf 270,581,542.00 Without creation 83,366,003.00 Откуда следует совершенно простой вывод: 1. НИКОГДА не используйте clone для копирования массивов, даже если массив надо создавать. 2. Если массив надо создавать можно воспользоваться Arrays.copyOf для краткости, хотя прямое создание и System.arraycopy быстрее, но немного. 2. Если массив существует и нужно просто заменить содержимое - используйте System.arraycopy. Вот и верь после этого людям -------------------- Mirkes |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Разобрало любопытство, решил посмотреть, как это зависит от длины массива
Время в миллисекундах Length 1 2 4 8 16 32 64 128 256 512 1,024 Clone 163 148 155 172 200 224 364 469 659 1,200 2,074 System.arraycopy 18 23 34 39 54 108 172 283 473 942 1,907 Arrays.copyOf 24 24 41 47 59 98 176 260 532 1,035 1,878 System without creation 10 13 20 23 28 39 46 66 98 148 216 далее пошел с меньшим в 100 раз числом повторов Length 2,048 4,096 8,192 16,384 32,768 65,536 131,072 Clone 48 97 188 375 768 1,572 3,485 System.arraycopy 40 96 167 376 800 1,589 3,365 Arrays.copyOf 39 91 171 373 825 1,601 3,466 System without creation 16 15 30 71 151 342 729 Это сообщение отредактировал(а) Mirkes - 15.7.2013, 18:46 -------------------- Mirkes |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |