¿Cómo puedo encontrar la cantidad de núcleos disponibles para mi aplicación desde el código Java?Encontrar el número de núcleos en Java
Respuesta
int cores = Runtime.getRuntime().availableProcessors();
Si cores
es menor que uno, ya sea su procesador está a punto de morir, o la JVM tiene un grave error en ella, o el universo está a punto de estallar.
No hay problema, ya que la mayoría de la información recopilada de la clase 'Runtime' es a String, pensé que sería útil mostrar que este devuelve un 'int'. –
Esto le dará la cantidad de hilos lógicos. p.ej. Si tiene hyper-threading activado, este será el doble del número de núcleos. –
@Peter, sí, buen punto. ¡Me sentí Rey de la colina al realizar esta acción con mi máquina i7! :) –
Esto funciona en Windows con Cygwin instalado:
System.getenv("NUMBER_OF_PROCESSORS")
He intentado esto pero he devuelto nulo :( – Adelin
Tengo instalado Cygwin, pero esto funciona desde el shell de Windows: '' groovy -e "println System.getenv ('NUMBER_OF_PROCESSORS')" '' ' –
No lo sé en la parte superior de mi cabeza si esta es una variable de entorno estándar de Windows, pero: '' 'establecer NUMBER_OF_PROCESSORS''' funciona desde la línea de comandos de Windows para mí. –
Si desea obtener el número de núcleos físicos que se pueden ejecutar comandos cmd y de la terminal y luego a analizar la salida para obtener 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 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";
}
}
}
Este es un código que es un buen candidato para ser OOPed. :) –
La clase OSValidator es compatible con OSX, pero getNumberOfCores la ignora por completo. Como un aparte, https://blog.opengroup.org/2015/10/02/mac-os-x-el-capitan-achieves-unix-certification/ por lo que 'Mac' debería estar en su isUnix() pero ... Para BSD, OSX, no existe ningún comando lscpu y su getNumberOfCores devolverá 0. –
En Linux, debe multiplicar "Core (s) por socket" por "Socket (s)". Además, usaría expresiones regulares. –
- 1. Cómo encontrar el número de núcleos en tiempo de ejecución en Haskell
- 2. Obtener el número de núcleos de CPU en JavaScript?
- 3. Java: ¿Núcleos disponibles para la JVM?
- 4. Cómo encontrar el número de objetos en el montón
- 5. JVM en múltiples núcleos
- 6. Encontrar el número de documentos en un índice Lucene
- 7. ¿Cómo obtener información de CPU en C en Linux, como el número de núcleos?
- 8. C++ Encontrar el mayor número en serie
- 9. Encontrar el número de inversiones de permutación
- 10. Encontrar el número de versión de Eclipse
- 11. ¿Cómo encontrar una clase intensiva de CPU en Java?
- 12. Encontrar el número de procesos secundarios
- 13. Encontrar el número más cercano en una matriz
- 14. ¿Cómo puedo encontrar el número de años entre dos fechas?
- 15. Encontrar el valor absoluto de un número sin utilizar Math.abs()
- 16. ¿Cómo encontrar el número de puerto JMX predeterminado?
- 17. ¿Cómo encontrar el número de días entre dos fechas en Java o Groovy?
- 18. Encontrar el número de errores en un proyecto de eclipse
- 19. verificación de Java si el número en el intervalo
- 20. javascript cómo encontrar el número de hijos en un objeto
- 21. C: encontrar el número de elementos en una matriz []
- 22. Para encontrar el número de sílabas en una palabra
- 23. ¿Cómo encontrar el número de días del mes en curso
- 24. Encontrar el número de líneas en un proyecto con powershell
- 25. Encontrar el número de página actual en jqGrid
- 26. ¿Cómo encontrar el número de células en UITableView
- 27. ¿Cómo encontrar el número de inversiones en una matriz?
- 28. Encontrar el número de columnas en una tabla
- 29. ¿Cómo encontrar el número de línea del cursor en Python?
- 30. Sobrecarga de Java: Número, Número; int, Doble
para casi todos los intentos y propósitos "procesador de núcleo ==". –
para encontrar la cantidad de núcleos que la máquina tiene físicamente es difícil usar únicamente Java. Encontrar la cantidad de núcleos que el programa Java puede usar al inicio es fácil, usando * Runtime.getRuntime(). AvailableProcessors() *. Debido a la capacidad de todos los sistemas operativos modernos principales para establecer la afinidad de la CPU (es decir, restringir una aplicación a solo un cierto número de núcleos), esta es una preocupación a tener en cuenta. – SyntaxT3rr0r
Núcleos lógicos o físicos? Hay una diferencia importante –