Для определенного сегмента кода Java я хотел бы измерить:
- Время выполнения (скорее всего, время выполнения потока)
- Использование памяти
- Загрузка процессора (в частности, относится к сегменту кода)
Я относительный Java-новичок и не знаю, как это может быть достигнуто. Я ссылался на JMX, однако я не уверен, как это можно использовать, и JMX выглядит немного "тяжелым", за то, что я ищу.
В идеале мне бы хотелось, чтобы какой-то измерительный класс мог сказать, что я хотел бы измерить, с возможностью вызова метода start()
до сегмента кода и метода stop()
после. Соответствующие показатели будут записаны в файл, который я укажу.
Например:
import com.example.metricLogger;
metricLogger logger = new metricLogger();
logger.setLogPath(pathToLogFile);
logger.monitor(executionTime);
logger.monitor(memoryUsage);
logger.monitor(cpuLoad);
logger.start();
/* Code to be measured */
logger.stop();
Есть ли стандартный/общепринятый способ достижения этого в Java?
Такие измерения предназначены для одноразовых сопоставлений производительности, и поэтому я не ищу никаких длительных процессов мониторинга в процессе производства.
Я более чем счастлив быть упомянутым в учебниках или внешних примерах и не ожидаю полного ответа здесь. Тем не менее, если что-либо столь же простое, как выше, может быть достигнуто, реалистичный пример будет очень хорошо снижаться.