Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Скорость выполнения кода JAVA / 18 сообщений из 18, страница 1 из 1
29.08.2007, 15:49:06
    #34762007
Vetic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Как определить скорсть выполнения определенного участка кода написанного на JAVA?
...
Рейтинг: 0 / 0
29.08.2007, 15:51:19
    #34762018
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 long  s =  new  Date().getLong();

....
код

 long  e =  new  Date().getLong();

 long  vremiaVipolneniaCodaNaJavaVMilisecundah = e-s;
...
Рейтинг: 0 / 0
29.08.2007, 15:58:27
    #34762056
Vetic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Еще мне посоветовали воспользоватся "профайлером", а что это и где о нем почитать не знаю. подскажите!
...
Рейтинг: 0 / 0
29.08.2007, 16:26:07
    #34762213
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Профайлер
...
Рейтинг: 0 / 0
29.08.2007, 16:39:30
    #34762272
Anarion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
http://www.google.ru/search?q=java+profiler&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a
...
Рейтинг: 0 / 0
29.08.2007, 17:14:47
    #34762472
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Профайлеры - г.вно.
Потому что:
1. работают через нативные интерфейсы JVMTI/JVMPI. Последний особенно ресурсоемкий.
2. их влияние на работу самой JVM, чаще всего, значительно.

единственный более-менее правильный способ измерить затраченное время - дергать System.currentTimeMillis()/System.nanoTime().

дальше. то что ты получишь в результате вызовов, в общем случае, не показатель скорости выполнения Java кода . Потому что есть такая замечательная штука как JIT. Как это влияет на время выполнения - тынц .
...
Рейтинг: 0 / 0
29.08.2007, 21:13:45
    #34763012
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
ТимоН дал верный ответ. После этого, топ можно закрыть, но автора, очевидно интересует нечто большее, чем замер времени ИМХО.
...
Рейтинг: 0 / 0
29.08.2007, 21:32:51
    #34763034
железный пони
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
ТимоН
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 long  s =  new  Date().getLong();

....
код

 long  e =  new  Date().getLong();

 long  vremiaVipolneniaCodaNaJavaVMilisecundah = e-s;
прям гетЛонг?
...
Рейтинг: 0 / 0
29.08.2007, 23:12:39
    #34763142
smbdy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
System.currentTimeMillis()
быстрее чем с датой :)
...
Рейтинг: 0 / 0
30.08.2007, 10:12:07
    #34763530
Vetic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
mayton... автора, очевидно интересует нечто большее, чем замер времени ИМХО.

Верно! Задача сосстоит в том чтобы сравнить скорость работы разных методов решения одной и той же задачи.
...
Рейтинг: 0 / 0
30.08.2007, 11:32:45
    #34763888
Vetic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
smbdySystem.currentTimeMillis()
быстрее чем с датой :)
Код: plaintext
1.
2.
3.
4.
 long  lBegin = System.currentTimeMillis();
//...some code
 long  lEnd = System.currentTimeMillis();
 long  lDelta = lEnd - lBegin;
...
Рейтинг: 0 / 0
30.08.2007, 11:53:13
    #34764001
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Vetic mayton... автора, очевидно интересует нечто большее, чем замер времени ИМХО.

Верно! Задача сосстоит в том чтобы сравнить скорость работы разных методов решения одной и той же задачи.

Тогда профайлер с этим справится ничуть не хуже измерения руками.
...
Рейтинг: 0 / 0
30.08.2007, 13:14:27
    #34764398
Vetic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Blazkowicz
Тогда профайлер с этим справится ничуть не хуже измерения руками.

А оправдано ли его применение тогда вообще ? Как я понял вариана с замером времени вполне может хватить на первое время (до изучения работы профайлера). Так ли это, и на сколько обекктивным будет результат например при сравнении работы малого количества сторк (например в разных вариантах простенького цикла);
...
Рейтинг: 0 / 0
30.08.2007, 13:36:15
    #34764469
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
Vetic Blazkowicz
Тогда профайлер с этим справится ничуть не хуже измерения руками.

А оправдано ли его применение тогда вообще ? Как я понял вариана с замером времени вполне может хватить на первое время (до изучения работы профайлера). Так ли это, и на сколько обекктивным будет результат например при сравнении работы малого количества сторк (например в разных вариантах простенького цикла);

Обойтсь систем-аутами с замерами времени можно только небольшом количестве случаев.
Н-р, когда тестируются алгоритмы или другие самодостаточные кусочки кода.

Как только возникает необходимость выявить места, где падает производительность, в крупном приложении, подход с систем-аутами даёт сбой. Причин тому несколько.
1. Придётся потратить много времени на расстановку систем аутов по всему коду. (цикл "поставили аут-собрали-запустили-потестировали-появилась мысль" может занимать от 10 до 30 минут, а повторяться он будет покрайней мере раз 10 :))

2. Таким образом очень трудно собрать статистику сколько времени провело приложение в конкретном методе, т.к. метод может вызываться разными путями. Считать в столбик значение полученные в консоле - не самый умный способ занять своё время.


Профайлер, хоть и замедляет время работы приложния и может оказывать влияние на реальное время выполнения различных методов, в целом позволяет очень точно сказать, какой фрагмент кода требует оптипизации. При этом экономится большее количество времени разработчика (см. п 1 и 2).
Yourkit profiler - the best.
...
Рейтинг: 0 / 0
30.08.2007, 13:46:17
    #34764519
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
VeticВерно! Задача сосстоит в том чтобы сравнить скорость работы разных методов решения одной и той же задачи.
в общем виде задача не разрешима. даже замерами времени. получим очень точное число которое ничего не говорит как о скорости в тестовом запуске так и будущей работе проги в реальных условиях. откуда вы знаете что делает ваша многозадачная ОС в это время?

если нужно проэстимэйтить один короткий кусок считайте милисекунды, выводы делайте только по воспроизводящимся разницам времени работы на порядок

если нужно анализировать целую прогу учитесь пользоваться профилятором. опять же точность по секундам из него не получить. но например узнать что этот алгм отжирает на 40% больше процессорного времени чем другой можно
...
Рейтинг: 0 / 0
30.08.2007, 23:36:53
    #34766275
железный пони
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
NotGonnaGetUs1. Придётся потратить много времени на расстановку систем аутов по всему коду. (цикл "поставили аут-собрали-запустили-потестировали-появилась мысль" может занимать от 10 до 30 минут, а повторяться он будет покрайней мере раз 10 :))injection оберегает от расстановки системаутов по всему коду.
...
Рейтинг: 0 / 0
31.08.2007, 12:26:23
    #34767413
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
железный пони NotGonnaGetUs1. Придётся потратить много времени на расстановку систем аутов по всему коду. (цикл "поставили аут-собрали-запустили-потестировали-появилась мысль" может занимать от 10 до 30 минут, а повторяться он будет покрайней мере раз 10 :))injection оберегает от расстановки системаутов по всему коду.

Не помогает. Injection'ы тоже нужно уметь расставить.

1. Логировать каждый метод - сметроубийство.

2. Фильтровать определённые методы - заколебёшься. Нужно знать досканально весь код, чтобы сразу понять кого считать - кого нет.

3. Методы бывают разной длинны. Вклад во время выполнения при инжекции в void inc() { i++; } и void foo() { *connect db* } - разный. В итоге сведения могут быть не актуальными.

4. Опять-таки - кто будет складывать время проведённой в методе вызываемом из разных точек?
А если нужно отследить вызовы только из подмножества этих точек? А чтобы при этом не проводить заново тестовые замеры?

5. Каждое ли java app пишется с поддержкой AOP?

Вывод:
Если как-то и можно обойтись инжекшинами, то придётся тратить время на разработку собственного велосипеда. В каких-то редких случаяех - это возможно оправдано. Во всех остальных - профайлер сильно экономит время.
...
Рейтинг: 0 / 0
31.08.2007, 13:06:33
    #34767617
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скорость выполнения кода JAVA
может написать тест в TestNG c @BeforeMethod @AfterMethod

имхо purposeful
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Скорость выполнения кода JAVA / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]