检测CPU型号信息

时间:2019-03-07 18:50:14

标签: java linux unix cpu hardware

有没有办法在Java中获取有关CPU模型(对于Unix系统)的信息?我的意思是不使用cat /proc/cpuinfo之类的系统命令。

我想得到类似“Intel®Xeon(R)CPU E5-2640 0 @ 2.50GHz”的字

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您希望获得如此详细的信息,最好的选择是阅读/proc/cpuinfo的内容并解析出想要的部分。

否则,您可以从JVM中获得number of processor cores

的计数
int count = Runtime.getRuntime().availableProcessors();

OS architecture

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

答案 1 :(得分:0)

我认为这个问题是这个get OS-level system information的重复,但是我将重新发布该问题的最佳答案。

  

您可以从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的方法。为此,您需要从this link下载sigar,并选中它以将其包含在项目How to include SIGAR API in 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());
        }
    }
}

答案 2 :(得分:0)

我只会读/proc/cpuinfo

String model = Files.lines(Paths.get("/proc/cpuinfo"))
   .filter(line -> line.startsWith("model name"))
   .map(line -> line.replaceAll(".*: ", ""))
   .findFirst().orElse("")