2010-12-02 22 views
7

¿Hay alguna forma de obtener el tamaño de la memoria total en el sistema operativo de Java? UtilizandoObtener el tamaño de la memoria del sistema operativo Java

Runtime.getRuntime().maxMemory() 

devuelve la memoria permitida para la JVM, no del sistema operativo. ¿Alguien tiene una forma de obtener esto (del código Java)?

+0

¿Qué es lo que necesita saber_? –

+0

@ Thorbjørn: Si estoy corriendo en una máquina con 2GB de RAM pero la JVM está limitada a 1GB, quiero obtener el tamaño de 2GB y no el tamaño de 1GB devuelto por el código de muestra. ¿O preguntas por qué lo necesito? –

+0

Te pregunto qué necesitas _por_? –

Respuesta

13
com.sun.management.OperatingSystemMXBean bean = 
    (com.sun.management.OperatingSystemMXBean) 
    java.lang.management.ManagementFactory.getOperatingSystemMXBean(); 
long max = bean.getTotalPhysicalMemorySize(); 

vuelve tamaño de la RAM disponible para la JVM (limitado por 32 bits), no el tamaño de la pila.

+0

Genial, es bueno saberlo! (+1) –

+1

"Restricción de acceso: el tipo 'OperatingSystemMXBean' no es API" en Java 8, refiriéndose específicamente al de 'com.sun.management'. –

2

No hay una forma única de Java para obtener esa información. Puede usar Runtime.exec() para iniciar comandos específicos del sistema operativo, p. /usr/bin/free en Linux. Aún en sistemas Linux, puede usar clases de acceso a archivos Java (FileInputStream) para analizar /proc/meminfo.

2

que no es posible con Java puro, su programa se ejecuta en una máquina virtual Java y, por lo tanto, está aislado del sistema operativo. Sugiero 2 soluciones para esto:

1) Se puede utilizar una JNI y llamar a una función de C++ para hacer eso
2) Otra opción es utilizar Runtime.exec(). Entonces usted tiene que obtener la información de "cat /proc/meminfo"

+0

La segunda opción funciona sin problemas. Gracias. –

Cuestiones relacionadas