2013-02-09 2 views
0

Я хочу записать время, затраченное моей программой Java. Большинство форумов предложить что-то вроде:Время процессора программы записи

int starttime=System.nanoTime(); 
//program code 
int endTime=System.nanoTime(); 
int timetaken=starttime-endTime; 

Проблема с этим подходом является то, что если есть несколько программ работают, то разница между EndTime и STARTTIME не время, потраченное на моей программе. Это также время, затраченное на планирование различных программ в CPU и т. Д. Однако мне интересно только записывать время, затраченное моей программой. Как мне получить это время?

+1

Вам нужен профайлер. См. Здесь: http://stackoverflow.com/questions/3571166/best-and-safest-java-profiler-for-production-use –

ответ

2

вы можете найти ответ в этом article. Процитировать:

Call ManagementFactory. getThreadMXBean(), чтобы получить ThreadMXBean, который описывает текущие потоки JVM. Метод getCurrentThreadCpuTime()метода bean возвращает время процессора для текущего потока. Метод getCurrentThreadUserTime() возвращает пользовательское время потока. Оба этих времен отчета в наносекунде

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

сказал, что, если вы действительно серьезно относитесь к профилированию потребления вашего процессора, вероятно, вы должны использовать профилировщик. вы можете начать с бесплатного открытого исходного кода, например, visualvm (также поставляется в комплекте с jdk), который будет (среди многих других) отвечать на этот точный вопрос очень легко.

Смежные вопросы