Определить информацию о модели процессора - PullRequest
1 голос
/ 07 марта 2019

Есть ли способ получить информацию о модели процессора (для системы Unix) в Java?Я имею в виду без использования системных команд, таких как cat /proc/cpuinfo.

Я хочу получить что-то вроде: "Intel (R) Xeon (R) CPU E5-2640 0 @ 2,50 ГГц"

Спасибо!

Ответы [ 3 ]

0 голосов
/ 18 июля 2019

Я думаю, что этот вопрос является дубликатом для этого получить системную информацию на уровне ОС , однако я повторно выложу лучший ответ для этого.

Вы можете получить ограниченную информацию о памяти из класса Runtime. Это на самом деле не совсем то, что вы ищете, но я думал, что предоставьте это для полноты картины. Вот небольшой пример. Вы также можно получить информацию об использовании диска из класса java.io.File. Для использования дискового пространства требуется Java 1.6 или выше.

public class Main {
  public static void main(String[] args) {
    /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): " + 
        Runtime.getRuntime().availableProcessors());

    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): " + 
        Runtime.getRuntime().freeMemory());

    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): " + 
        (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

    /* Total memory currently available to the JVM */
    System.out.println("Total memory available to JVM (bytes): " + 
        Runtime.getRuntime().totalMemory());

    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();

    /* For each filesystem root, print some info */
    for (File root : roots) {
      System.out.println("File system root: " + root.getAbsolutePath());
      System.out.println("Total space (bytes): " + root.getTotalSpace());
      System.out.println("Free space (bytes): " + root.getFreeSpace());
      System.out.println("Usable space (bytes): " + root.getUsableSpace());
    }
  }
}

В вашем случае вы хотите Runtime.getRuntime().availableProcessors().

Есть и другой способ, используя sigar API. Для этого вам нужно скачать sigar с по этой ссылке и установить этот флажок, чтобы включить его в ваш проект Как включить SIGAR API в Java Project .

Затем вы будете использовать что-то вроде этого:

import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class CpuInfo {
    public static void main(String[] args) throws SigarException {
        Sigar sigar = new Sigar();
        org.hyperic.sigar.CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
        for(org.hyperic.sigar.CpuInfo info : cpuInfoList){
            System.out.println("CPU Model : " + info.getModel());
        }
    }
}
0 голосов
/ 18 июля 2019

Я бы просто прочитал /proc/cpuinfo.

String model = Files.lines(Paths.get("/proc/cpuinfo"))
   .filter(line -> line.startsWith("model name"))
   .map(line -> line.replaceAll(".*: ", ""))
   .findFirst().orElse("")
0 голосов
/ 18 июля 2019

Если вам нужен этот уровень детализации, лучше всего прочитать содержимое /proc/cpuinfo и проанализировать нужную часть.

В противном случае из JVM вы можете получить счетчик количество ядер процессора

int count = Runtime.getRuntime().availableProcessors();

или Архитектура ОС :

String arch = System.getProperty("os.arch");
...