在Java中查找内核数量

如何从Java代码中find可用于我的应用程序的内核数量?

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

如果coresless于一个,那么你的处理器即将死亡,或者你的JVM有一个严重的bug,否则宇宙即将炸毁。

如果你想获得物理内核的数量,你可以运行cmd和terminal命令,然后parsing输出以获取所需的信息。 以下是显示返回物理内核数量的function。

 private int getNumberOfCPUCores() { OsValidator osValidator = new OsValidator(); String command = ""; if(osValidator.isMac()){ command = "sysctl -n machdep.cpu.core_count"; }else if(osValidator.isUnix()){ command = "lscpu"; }else if(osValidator.isWindows()){ command = "cmd /C WMIC CPU Get /Format:List"; } Process process = null; int numberOfCores = 0; int sockets = 0; try { if(osValidator.isMac()){ String[] cmd = { "/bin/sh", "-c", command}; process = Runtime.getRuntime().exec(cmd); }else{ process = Runtime.getRuntime().exec(command); } } catch (IOException e) { e.printStackTrace(); } BufferedReader reader = new BufferedReader( new InputStreamReader(process.getInputStream())); String line; try { while ((line = reader.readLine()) != null) { if(osValidator.isMac()){ numberOfCores = line.length() > 0 ? Integer.parseInt(line) : 0; }else if (osValidator.isUnix()) { if (line.contains("Core(s) per socket:")) { numberOfCores = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]); } if(line.contains("Socket(s):")){ sockets = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]); } } else if (osValidator.isWindows()) { if (line.contains("NumberOfCores")) { numberOfCores = Integer.parseInt(line.split("=")[1]); } } } } catch (IOException e) { e.printStackTrace(); } if(osValidator.isUnix()){ return numberOfCores * sockets; } return numberOfCores; } 

OSValidator类:

 public class OSValidator { private static String OS = System.getProperty("os.name").toLowerCase(); public static void main(String[] args) { System.out.println(OS); if (isWindows()) { System.out.println("This is Windows"); } else if (isMac()) { System.out.println("This is Mac"); } else if (isUnix()) { System.out.println("This is Unix or Linux"); } else if (isSolaris()) { System.out.println("This is Solaris"); } else { System.out.println("Your OS is not support!!"); } } public static boolean isWindows() { return (OS.indexOf("win") >= 0); } public static boolean isMac() { return (OS.indexOf("mac") >= 0); } public static boolean isUnix() { return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 ); } public static boolean isSolaris() { return (OS.indexOf("sunos") >= 0); } public static String getOS(){ if (isWindows()) { return "win"; } else if (isMac()) { return "osx"; } else if (isUnix()) { return "uni"; } else if (isSolaris()) { return "sol"; } else { return "err"; } } 

}

这可以在安装了Cygwin的Windows上运行:

System.getenv("NUMBER_OF_PROCESSORS")