В настоящее время я получаю общее время процессора потока с использованием JMX следующим образом:
private long calculateTotalThreadCpuTime(ThreadMXBean thread) {
long totalTime = 0l;
for (ThreadInfo threadInfo : thread.dumpAllThreads(false, false))
totalTime += thread.getThreadCpuTime(threadInfo.getThreadId());
return totalTime;
}
Поскольку ThreadMXBean на самом деле является удаленным прокси, производительность составляет ужасно в порядке секунд для этого фактического вызова метода.
Есть ли более быстрый способ сделать это?
Обновление : я использую это для мониторинга производительности. Измерения были и временем «настенных часов», и JProfiler, который показал около 85% моего времени, проведенного в этом методе. У меня есть некоторые другие вызовы MXBean (Runtime, Memory, GC), но они намного дешевле. Скорее всего, потому что каждый вызов thread.getThreadCpuTime
является удаленным.
Обновление 2 : снимок экрана JProfiler, показывающий проблемы с производительностью.
![alt text](https://i.stack.imgur.com/plvAR.png)