【问题标题】:Is there a way in Java to find out how many CPUs (or cores) are installed?Java中有没有办法找出安装了多少个CPU(或内核)?
【发布时间】:2011-05-30 05:29:56
【问题描述】:

我想对多线程程序进行一些调整。

如果我知道有多少线程可以真正并行工作,我可以让程序更有效。

在 Java 中有没有办法获取这些信息?

【问题讨论】:

  • 好问题!谢谢提问

标签: java runtime system


【解决方案1】:

你可以使用

Runtime.getRuntime().availableProcessors()

但它更像是一个最好的猜测,甚至被 API 提及

此值可能会在特定的虚拟调用过程中发生变化 机器。对可用数量敏感的应用程序 因此,处理器应偶尔轮询此属性并调整 适当地使用他们的资源。

【讨论】:

  • +1 - 注意:这不会告诉应用程序安装了多少处理器/内核。但它确实告诉它有多少 可供 JVM 使用 ...这是 OP 真正需要的。
  • @Stephen C:是的,我正是需要这个。但是,您能否启发我一点:什么时候可能不是所有处理器都可用于 JVM?
  • @Roman:我想当操作系统为其他进程保留一些内核/处理器时,JVM 将无法使用它们。
【解决方案2】:

关于availableProcessors()方法的一点说明,它不区分物理cpu和虚拟cpu。例如,如果您在计算机上启用了超线程,则该数字将是物理 CPU 数量的两倍(这有点令人沮丧)。不幸的是,在纯 Java 中无法确定真实 CPU 与虚拟 CPU。

【讨论】:

    【解决方案3】:

    Runtime.getRuntime().availableProcessors();

    【讨论】:

      【解决方案4】:

      怎么样(代码 sn-ps 说 1000 字):

       public class Main {
      
       /**
        * Displays the number of processors available in the Java Virtual Machine
        */
       public void displayAvailableProcessors() {
      
          Runtime runtime = Runtime.getRuntime();
      
          int nrOfProcessors = runtime.availableProcessors();
      
          System.out.println("Number of processors available to the Java Virtual Machine: " + nrOfProcessors);
      
       }
      
       public static void main(String[] args) {
          new Main().displayAvailableProcessors(); 
       }
      }
      

      【讨论】:

        【解决方案5】:

        在 Windows 上是肯定的。带有 kernel32.dll 的 JNA。使用来自GetNativeSystemInfo 调用的SYSTEM_INFO 结构。除其他外,还有dwNumberOfProcessors

        我相信这将提供实际安装的处理器数量,而不是可用数量。

        【讨论】:

        • 这是一种相当困难(且不可移植)的方式。
        • 同意,尽管它确实给出了处理器的数量。我只记得之前出于不同目的使用 SYSTEM_INFO 结构的那个字段。
        猜你喜欢
        • 2021-05-10
        • 1970-01-01
        • 2013-04-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多