![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Mirkes |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Не знаю, насколько это интересно, но разбираясь с темой Стандартные календарные расчеты столкнулся с тем, что мерять скорость можно очень по разному. В ходе обсуждения была дана ссылка на статью с JavaOne. Связавшись с автором статьи удалось выяснить основные принципы оценки скорости работы методов. На основе этого был разработан следующий класс Tester, позволяющий тестировать фактически любые методы.
Предлагаю обсудить необходимость такого стандарта для сравнений, поскольку вопрос о том, что быстрее возникает достаточно часто. Итак код тестирующего класса
Очевидно, что все, связанное с классом Days, приведено только для примера. Это подлежит замене. Запуск из консоли с параметрами
Это рекомендация автора статьи с JavaOne Алексея Шепилева. Выходные данные: Среднее число вызовов метода за милисеккунду и оценка ошибки по критерю Стьюдента. Быстрее тот метод, у которого показатель БОЛЬШЕ. Это сообщение отредактировал(а) Mirkes - 17.1.2012, 03:22 -------------------- Mirkes |
||||
|
|||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Неплохо, думаю, найдет применение. А для самих замеров можно использовать StopWatch из Commons Lang.
А кстати, почему nanoTime? |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Просто насколько я знаю это самый точный метод получения времени. Я понимаю, что он зависит от платформы. Давайте решим, что следует использовать и поставим вместо nanoTime. -------------------- Mirkes |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
А что Алексей Шепилев может подсказать по этому поводу?
|
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
кстати, народ, хотел создать такую же тему.
Какие есть способы измерения производительности? Естественно, ищу способы, кроме System.currentTimeMillis() в начале и конце метода. ![]() |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Предложенный вариант основан как раз на подсказках Шепилева. В том числе и nanoTime. Он пишет, что они планируют опубликовать свой измеритель, но пока он не опубликован.
-------------------- Mirkes |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Я не уверен, что приведенный код способен гарантировать Jit-компиляцию (для чего собственно разогрев и делается). Кроме того, неплохо бы жестко зафиксировать режим JVM, client или server, там же есть сильные различия в том числе в ряде агрессивных оптимизаций. NanoTime на многих платформах бесполезно, они даже милисекундной точности толком дать не могут, тот же WinXP тому примером. Мое мнение таково, что универсальный измеритель - это профайлер на подобранном аппаратном стенде. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
В соответсвии с рекомендациями Шепелева (правда он их писал для конкретной задачи и не утверждал их оптимальности) я указал параметры запуска: То, что этот измеритель не заменяет профайлер - очевидно. -------------------- Mirkes |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |