«Общее время (ЦП)» в Java VisualVM содержит время, которое ЦП потратил на выполнение других процессов? - PullRequest
0 голосов
/ 30 января 2020

Содержит ли столбец «общее время (ЦП)» на вкладке «Профилировщик ЦП» Java VisualVM время, которое ЦП потратил на выполнение других процессов?

Например, давайте рассмотрим такую ​​ситуацию:

  • Я запускаю программу, в которой у меня есть метод myMethod (), который выполняет некоторые вычисления. Это вычисление занимает 2 секунды - поэтому, если процессор ничего не делает, а только выполняет мой код, выполнение этого метода занимает 2 секунды.
  • Когда я профилировал свое приложение, ЦП выполнял несколько процессов - мой процесс и какой-то другой процесс (например, у меня был запущен браузер или что-то в этом роде).

  • Процессор запустил myMethod (), он некоторое время выполнял этот метод, затем начал выполнять процесс браузера и провел там 1 секунду, затем снова вернулся к выполнению myMethod () и закончил это. Таким образом, между началом myMethod () и его окончанием прошло 3 секунды, но только 2 секунды были использованы для выполнения myMethod ().

Какое время будет отображаться в столбце «Общее время (ЦП)» на вкладке «Профилировщик ЦП» в Java VisualVM - 2 секунды или 3 секунды?

1 Ответ

1 голос
/ 30 января 2020

При сообщении о времени ЦП, профилировщик будет сообщать о времени, потраченном самой JVM (возможно, включая системное время).

Время ЦП, используемое (скажем) браузером, не должно учитываться во времени ЦП колонка. Если это было / есть, тогда заголовок столбца должен быть "истек" или "реальным" временем.

Если вы не уверены в этом, напишите несколько простых тестовых программ и профилируйте их:

  • Посмотрите, что сообщает профилировщик, когда ваше приложение вызывает Thread.sleep(....)

  • Посмотрите, что профилировщик сообщает, когда ваше приложение блокирует во время чтения строки из System.in.

...