Обычно сэмплер будет просто проверять каждый раз, что делает ваша программа, и сообщать вам, сколько раз (и простым умножением дает приблизительное количество времени) вашей программы внутри данного метода.
Это часто не имеет никакого отношения к реальной загрузке процессора.
Например, вызов sleep() приостанавливает поток, и, как таковой, процессор почти не загружается вашим кодом, но все же, если у меня есть программа, которая только запускается, спит в течение 10 минут и заканчивается, выборка говорит мне, что Thread.sleep потребляет 100% времени моего процессора.
То же самое относится к операциям ввода-вывода, в которых ваш поток сидит, ожидая, когда данные будут доставлены откуда-то (может быть удаленный интернет-хост или просто ваш диск), и не сильно загружает ЦП, но все же сэмплер (правильно) скажет вам, что большую часть времени проводилось внутри методов ввода-вывода, даже если сам процессор не делал так много.
Вы можете указать код своей темы? –
Thread.sleep не является бесплатным, но если он показывает высокий процент времени (и вы не спите за 0 мс), это почти наверняка неправильно. Самое простое - игнорировать вызовы Thread.sleep вместе с большинством операций блокировки ОС, если речь идет о потреблении процессора. –
Профилировщики пытаются оценить время, затрачиваемое, но по ряду причин оно никогда не бывает на 100% точным. Вы должны относиться к ним как к руководству, но также применять здравый смысл к результатам. –