单线程程序,以利用多个核心

use*_*911 8 java multithreading

Java程序的单个线程是否可以自动使用CPU上的多个内核?

Gra*_*ray 15

Java程序的单个线程是否可以自动使用CPU上的多个内核?

是的,不是.单线程Java程序将使用多个线程,因为GC,JMX,终结器和其他后台线程可以在不同的CPU(无论是CPU还是内核)中运行.如果GC线程可以在另一个CPU中运行,那么它们可以显着提高性能.但是,您的单线程应用程序代码虽然可能在CPU之间移动,但永远不会同时在2个CPU中运行.

如何找出答案?

这是一个更难的问题,它取决于您正在运行的架构. ps在*nix下,将能够显示运行队列中是否有多个线程,但即使这样,它也可能无法显示它们实际上是在多个CPU中执行.

  • 操作系统可能知道内核和 CPU 之间的区别,但 JVM 只能看到逻辑 CPU (2认同)

kan*_*kan 0

通常 gc 是在单独的线程中运行的。但通常情况下,这不会产生任何显着差异。就这样。