計算負荷の高いシングル スレッド プログラムを作成しましたが、それを実行すると、クアッド コア プロセッサの使用率が 95% であることに驚きました。25% 近くの使用率 (1 コア) になると予想していました。sysinternalsのProcess Explorerを使用したところ、Java プロセスに 6 つのスレッドがあり、合計プロセッサ時間の約 16% というほぼ同じ負荷分散が行われていることがわかり、さらに驚きました。
当初はコードを並列化する予定でしたが、非並列コードでも CPU の負荷がすでに 95% に達しているため、パフォーマンスが向上しないようです。
Java がどういうわけか私のコードを自動的に並列化しているように見えますが、ネット上のすべてのものは、これが真実ではないことを示しています。誰が何が起こっているのか知っていますか?
編集:以下の質問のいくつかに答えられることを願って、いくつかのスクリーンショットを追加しました:
アイドル時のシステム - 1% の負荷。8 つの論理コアを備えたクアッド コア CPU を使用しています。
非並列 Java プログラムが実行されています。4 つのコアすべてがほぼ限界に達していることに注意してください。
SysInternals Process Explorer からの非並列 Java プログラムのビュー。ほぼ同じ負荷を持つ 8 つのスレッドに注意してください。