Я написал сложную сложную однопоточную программу, но когда я ее выполнил, я был удивлен, увидев, что мой четырехъядерный процессор имеет 95% -ный коэффициент использования. Я ожидал увидеть что-то близкое к 25% использованию (одно ядро). Я использовал Process Explorer от sysinternals и был также удивлен, увидев, что процесс Java имеет шесть потоков с почти одинаковым распределением нагрузки, составляющим около 16% общего времени процессора.Имеет ли Java автоматическое распараллеливание?
Первоначально я планировал распараллелить свой код, но теперь кажется, что я не получу никакой производительности, поскольку процессор уже на 95% загружен даже с моим непараллельным кодом.
Похоже, что Java как-то автоматически распараллеливает мой код, но все в сети говорит мне, что это не может быть правдой. Кто-нибудь знает, что происходит?
Edit: я добавил несколько скриншотов, мы надеемся ответить на некоторые из вопросов ниже:
системы на холостом ходу - 1% нагрузки. Я использую четырехъядерный процессор с 8 логическими ядрами.
Моя непараллельная программа java работает. Обратите внимание, что все 4 ядра почти увеличившиеся:
Вид моей непараллельной программы Java от SysInternals Process Explorer. Обратите внимание на 8 потоков с почти одинаковой нагрузкой:
Большинство систем показывают использование в процентах от одного процессора, полностью используемого. Таким образом, при полном использовании ваша программа будет составлять 400%. Не уверен, что это ваша проблема, но, возможно, вы просто неверно истолковываете. – Others
Также используйте специальный инструмент java, например jmc, jconsole или jstat, чтобы посмотреть, что происходит. Может быть, куча java приближается к OutOfMemory, которая заставляет GarbageCollector записывать процессор. –
Привет, Стив, вы получаете 95% -ное использование во всех ядрах процессора? –