9

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

4

3 回答 3

15

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

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

怎么知道?

这是一个更难的问题,它取决于您运行的架构。 ps在 *nix 下将能够显示运行队列中是否有多个线程,但即便如此,它也可能不会显示它们实际上是在多个 CPU 中执行的。

于 2013-04-10T20:58:14.573 回答
1

如果定义为单线程,您自己的代码将不会在多个内核上运行。没有单线程应用程序可以在多个内核上同时运行 - 除非您在不知情的情况下使用底层多线程调用/库。

于 2013-04-10T21:00:28.057 回答
0

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

于 2013-04-10T20:57:27.617 回答