Мне трудно найти какую-нибудь программу, которая отслеживала бы выполнение Java-программы.
Для начала просто что-то, что давало бы мне все вызовы методов и время, затрачиваемое на выполнение каждого вызова, было бы неплохо.
У вас есть предложения?Заранее спасибо
РЕДАКТИРОВАТЬ: я хотел бы получить все дерево вызовов или иерархию, как бы она ни называлась, при запуске, с затраченным временем, и я не мог получить его с VisualVM.Я нашел скриншот некоторых инструментов, которые якобы могли бы сделать это, но я не прошел с этим, и я хотел бы начать с чего-то более простого:
Это было быдовольно близко к тому, что я имею в виду: оно дает след некоторого дерева вызовов методов, времени, потраченного на каждый метод, даже представление о нем.
Какие проблемы я пытался решить изначально?Вот почти вся история: во-первых, я работаю над некоторым инструментом, который должен заполнить некоторую базу знаний.Недавно я понял, что это было довольно медленно (какой-то конкретный запрос, то есть добавление ~ 30 сущностей к базе заняло бы более 20 секунд), поэтому я хотел бы знать, тратится ли время на мой код в сети (REST)позвоните, чтобы обновить эту базу знаний), в самой базе знаний или в моем коде.И если мой код работает медленно, я хочу знать, что именно он делает, что отнимает так много времени.
Другая причина в том, что я читал «Эффективное Java 3-е издание», кстати, отличная книга.В пункте 6 «Избегайте создания ненужных объектов»
есть фрагмент кода:
// Hideously slow! Can you spot the object creation?
private static long sum() {
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}
по сравнению с этим:
private static long sum() {
long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}
Я вижу, что онвторая версия займёт меньше времени, я понимаю, почему нет экземпляров объекта Long и т. д., но я хотел бы увидеть, с фактическими мерами, сколько именно времени занимает создание экземпляров, посмотреть с мерами количество экземпляров Long,и другие объекты создаются, какой процент памяти занимают объекты Long в этом случае и т. д.
И некоторые другие события на работе, когда мы слепо проводим большой рефакторинг, некоторые горячие споры о том,реализация X была «более эффективной», чем реализация Y, но на самом деле у нас никогда не было данных для ее резервного копирования.
В общем, я понимаю, что мне нужен инструмент для получения реальных и надежных данных о том, что делает кодчто происходит в JVM, сколько памяти выделяется, на какой объект, сколько времени тратитсячто делать и т. д.
Это содержит ОЧЕНЬ много конкретных вопросов, и мой первый был таким: «Как я могу отследить выполнение даже простой программы».
Спасибои извините за то, что я не слишком специфичен для начала.
И другой пост, который был предложен, ЭТО мало чем помог, используя VisualVM с плагином Profile Startup, на игрушечном примере из Effective Java, я могу получитьчто-то, когда я считаю до Integer.MAX_VALUE,
, но если я, например, считаю до 1.000.000, похоже, VisualVM неесть время, чтобы начать (хотя я думал, что запуск моей программы с параметром -agentpath: /home/joseph/dev/visualvm_142/profiler/lib/deployed/jdk16/linux-amd64/libprofilerinterface.so=/home/joseph/dev/visualvm_142 / profiler / lib, 5140 позволит запустить VisualVM, но все, что я получаю, это пустой экран с «Статус: профилирование неактивно», но это все равно, что выполнение, где я рассчитывал на Integer.MAX_VALUE, я просто делаюне понимаю):