Общее время метода в Java VisualVM
В Java VisualVM существует ли способ отобразить общее время метода, а не "само время"? (Последнее не особенно полезно, поскольку оно ничего не говорит о том, сколько времени на самом деле предпринимаются для выполнения.)
Если нет, существует ли отдельный автономный Java-профайлер, который вычисляет общее время метода?
Ответы
Ответ 1
Глядя на данные трассировки в представлении "моментальный снимок", вы можете видеть как общее, так и собственное время.
Нажмите кнопку "моментальный снимок", которая появится в таблице результатов. Это создаст новую вкладку, содержащую представление "Дерево вызовов", которое разбивает количество "я" и общее время. "Комбинированное" представление также предоставляет эту информацию, но разделяет пространство экрана с представлением "Горячие точки", которое похоже на стандартный профиль профилирования.
Снимки могут быть созданы из стандартных данных "Profiler" или "Sampler". Однако моментальные снимки "Профайлер" могут быть созданы только до закрытия приложения, в то время как "Sampler" могут быть созданы в любое время.
(приведенная выше информация основана на VisualVM 1.3.1)
Ответ 2
Просто сделайте снимок результатов профилирования. Вы получите время настенных часов, а также время от времени.
Ответ 3
Существует простой способ получить общее время выполнения программы как процент времени выполнения настенных часов (а не миллисекунды). Просто используйте ctrl-break, чтобы получить кучу stackshots, пока вы этого ждете. Доля их, содержащая рутину, составляет% времени. Точность зависит от количества выстрелов. Если вы просто ищете, где проблемы, вам не нужно точное измерение времени. Вот краткое описание того, как это работает.
Ответ 4
Я думаю, вы хотите узнать, сколько времени занимает выполнение каждого метода. Вы хотите использовать JETM для контроля производительности.
Это даст вам время входа, время выхода и разницу во времени для каждого метода. Вы узнаете, какой метод занимает сколько времени.
Если вы используете Spring, тогда становится легко интегрировать JETM
http://jetm.void.fm/howto/spring_2_x_integration.html
Ответ 5
вы можете использовать jprofiler или некоторые инструменты javaagent для отслеживания времени выполнения метода для вас. В github есть некоторые инструменты с открытым исходным кодом, такие как simpleAPM.
Ответ 6
JavaAssist - это библиотека классов для управления вашим байт-кодом Java, не касаясь источника. Рассмотрим пример измерения
время, затраченное на выполнение метода.
public class Subject {
/**
* Timetaken for start & end of the method
*
* @throws InterruptedException
*/
public void method2() throws InterruptedException {
// Some business logic :)
Thread.sleep(2000);
}
}
Чтобы измерить время выполнения subject.method2()
, вы можете улучшить Subject.methods()
, добавив начало и конец кода метода, как показано.
public class JavaAssist {
public static void main(String[] args) {
timeTaken();
}
public static void timeTaken() {
try {
ClassPool p = ClassPool.getDefault();
CtClass cc = p.get("Subject");
CtMethod meth2 = cc.getDeclaredMethod("method2");
meth2.insertBefore("System.out.println(\" Start : \"+new java.util.Date());");
meth2.insertAfter("System.out.println(\" End : \"+new java.util.Date());");
// cc.writeFile(".");
Class c = cc.toClass();
Subject s = (Subject) c.newInstance();
s.method2();
cc.detach();
} catch (Exception e) {
// suppressed
}
}
}
Вывод:
Начало: ср. 26 мая 17:24:18 EDT 2010
Окончание: ср. 26 мая 17:24:20 EDT 2010
Ссылка
http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html#read
http://www.csg.is.titech.ac.jp/~chiba/javassist/html/
Origin Сообщение от:
http://www.senthilb.com/2010/05/javaassist-byte-code-enhancement.html
Ответ 7
вы можете использовать
long startTime = System.currentTimeMillis();
в начале
и
long endTime = System.currentTimeMillis();
и, наконец, получить результат
long result = endTime - startTime; //Note, part might be backwards, I don't
//Remember