Есть ли способ в Java узнать, сколько процессоров (или ядер) установлено?

Я хочу сделать некоторую настройку для многопоточной программы.

Если я знаю, сколько потоков действительно может работать параллельно, я могу сделать программу более эффективной.

Есть ли способ в Java получить эту информацию?

Ответ 1

Вы можете использовать

Runtime.getRuntime().availableProcessors()

Но его более полное предположение и даже упомянутое API

Это значение может изменяться во время конкретного вызова виртуального       машина. Приложения, чувствительные к числу доступных       поэтому процессоры должны периодически опробовать это свойство и настроить       их использование ресурсов соответствующим образом.

Ответ 2

Одна заметка о методе доступныхпроцессоров(), в нем не проводится различие между физическим процессором и виртуальным процессором. например, если на вашем компьютере включена гиперпоточность, число будет в два раза больше физического процессора (что немного расстраивает). к сожалению, нет способа определить реальный vs. virtual cpus в чистой java.

Ответ 3

Runtime.getRuntime().availableProcessors();

Ответ 4

Как насчет (фрагменты кода говорят 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

Да, конечно. JNA с kernel32.dll. Используйте SYSTEM_INFO структуру из вызова GetNativeSystemInfo. Между прочим есть dwNumberOfProcessors.

Я считаю, что это обеспечит фактическое количество установленных процессоров, а не количество доступных.