Почему команда gtime возвращает загрузку процессора> 100% для Java-программы без многопоточности? - PullRequest
2 голосов
/ 11 ноября 2019

Я пытался использовать команду gtime (я считаю, что это Mac OSx, эквивалентный команде времени Unix), чтобы получить время выполнения Java-программы. Но результаты кажутся запутанными:

  1. Загрузка ЦП показывает> 100%, даже несмотря на то, что программа не создает потоков.
  2. Реальное время намного меньше, чем у пользователя. время, хотя в моем коде нет многопоточности.

Вот что я получаю:

> gtime java Main

7.36user 0.29system 0: 02.11elapsed 362% ЦП (0avgtext + 0avgdata 306264maxresident) k 0 входов + 0 выходов (273major + 114934minor) pagefaults 0swaps

Как видите, загрузка ЦП составляет 362% и время пользователя (7,36 с)>> В режиме реального времени (2.11с). Кто-нибудь может объяснить, почему это так? Я использую Macbook Pro с процессором Intel® Core iM- i7-6700HQ @ 2,60 ГГц (4 ядра).

Кстати, при запуске программы «Hello World» вJava также возвращает использование процессора> 100%.

> gtime java HelloWorld

Hello World! 0.14пользователь 0.04система 0: 00.14 истекло 124% ЦП (0avgtext + 0avgdata 33668maxresident) k 0 входов + 0 выходов (0major + 10288 минор) pagefaults 0swaps

1 Ответ

2 голосов
/ 11 ноября 2019

JVM запускает несколько фоновых потоков, даже когда вы запускаете простую main() программу. Эти потоки выполняют JIT-компиляцию, обработку RMI, финализацию объектов или другие системные задачи. Вы можете увидеть эти потоки либо отладкой вручную, либо путем создания дампа потока. Во-вторых, большинство реализаций сборщика мусора, используемых сегодня, являются либо параллельными, либо многопоточными (или оба) и будут пытаться использовать все доступные ядра ЦП для сокращения паузы ГХ.

Все вышеперечисленное приведет к тому, что JVM будет использовать более одного ядра ЦП. Большинство инструментов сообщит об этом как о более чем 100% загрузке ЦП.

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