verificar descargar java

descargar - java offline



Encontrar el nĂșmero de nĂșcleos en Java (4)

Esta es una forma adicional de averiguar la cantidad de núcleos de CPU (y un montón de otra información), pero este código requiere una dependencia adicional:

Sistema operativo nativo e información de hardware https://github.com/oshi/oshi

SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardwareAbstractionLayer = systemInfo.getHardware(); CentralProcessor centralProcessor = hardwareAbstractionLayer.getProcessor();

Obtenga la cantidad de CPU lógicas disponibles para procesar:

centralProcessor.getLogicalProcessorCount();

¿Cómo puedo encontrar el número de núcleos disponibles para mi aplicación desde el código Java?


Esto funciona en Windows con Cygwin instalado:

System.getenv("NUMBER_OF_PROCESSORS")


Si desea obtener un número de núcleos físicos, puede ejecutar cmd y el comando de terminal y luego analizar la salida para obtener la información que necesita. A continuación se muestra la función que devuelve el número de núcleos físicos.

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; }

Clase de 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"; } }

}


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

Si los cores son menos de uno, o su procesador está a punto de morir, o su JVM tiene un error grave, o el universo está a punto de estallar.