![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Greg |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
Доброго времени суток !
Вопрос заключается в том, насколько сильно ухудшается производительность операций на синхронизированной коллекции, по сравнению с её не синхронизированным аналогом. Как мне казалось, теоретически время доступа должно ощутимо различаться, но на практике результаты вообще оказались не вменяемыми:
RandomArray.java:
Я получил результаты:
Заменяя строку 9 первого листинга получаю приблизительно тоже:
Получается, что этим методом не получается убедиться в правильности заключения ? Почему так и как надо ? Это сообщение отредактировал(а) Greg - 8.6.2008, 20:19 --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
||||||||
|
|||||||||
Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
В общем что я имею:
Если оба списка несинхронизированные
Весьма занимательно. Это сообщение отредактировал(а) Platon - 8.6.2008, 20:36 |
||||
|
|||||
Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
А вообще стоит глянуть реализацию Collections.sort()
И Collections.SynchronizedList.listIterator()
|
||||
|
|||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
||||
|
||||
Greg |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.9.2006 Где: Беларусь, г.Минск Репутация: 1 Всего: 7 |
Platon, верно вы подметили - зря не посмотрел исходник. Удивлен, признаться, не ожидал увидеть такой контент метода
![]()
Результаты:
После замены строки 7 на 8:
Почему метод add() ArrayList работает медленнее чем его синхронизированный аналог ? --------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины. |
||||||
|
|||||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Забыл добавить, что в первом случае надо заменить LinkedList на ArrayList, тогда Collections.reverse() работает по другому алгоритму, который и обеспечивает множество вызовов синхронизированных методов. У меня разница в три с копейками раза.
У вас один и тотже List используется. Куча времени уходит на выделение и копирование блоков памяти при росте списка, и всё это в методе add(). С точки зрения чистоты эксперимента он не подходит. |
|||
|
||||
w38 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.12.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
на какой джава-машине тестите ?
По статьям Джошуа Блоха я сделал вывод, что 1.6 умеет определять гарантированно однопоточный доступ и уменьшать затраты на отслеживание блокировок. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |