Есть ли в Java способ узнать, сколько процессоров (или ядер) установлено? - PullRequest
11 голосов
/ 24 декабря 2010

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

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

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

Ответы [ 5 ]

17 голосов
/ 24 декабря 2010

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

Runtime.getRuntime().availableProcessors()

Но это, скорее, лучшее предположение и даже упомянутое API

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

6 голосов
/ 24 декабря 2010

Одно замечание о методе availableProcessors (), он не различает физический процессор и виртуальный процессор. например, если на вашем компьютере включена поддержка гиперпоточности, это число будет вдвое больше физического процессора (что немного расстраивает). к сожалению, нет способа определить реальный или виртуальный процессор в чистой Java.

4 голосов
/ 24 декабря 2010

Runtime.getRuntime().availableProcessors();

2 голосов
/ 24 декабря 2010

Как насчет (фрагменты кода говорят 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(); 
 }
}
1 голос
/ 24 декабря 2010

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

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

...