2009-06-14 14 views
12

Como todos sabemos, la opción java -Xmx se usa para establecer el espacio de almacenamiento dinámico máximo disponible para un programa Java. Pero, ¿hay alguna manera de que un programa Java lea el valor que se ha establecido? Algo así como System.getMaximumHeapSpace() (que no existe).Leer el espacio máximo de almacenamiento dinámico en tiempo de ejecución

+0

Duplicado de http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-from-the-jvm? – Pool

+0

Una forma no programática es ejecutar la utilidad 'jmap' disponible en su JDK. La sintaxis sería 'jmap -heap '. El campo 'MaxHeapSize' indica el valor' Xmx' establecido en ese proceso Java. – asgs

Respuesta

18

Hay un Runtime.maxMemory, que según la documentación devolverá la cantidad máxima de memoria que la Máquina Virtual Java intentará usar, pero no es específico si es la memoria de montón máxima establecida al iniciar la JVM.

Así como una prueba, me escribió el siguiente programa:

class MaxMemory { 
    public static void main(String[] args) { 
     System.out.println(Runtime.getRuntime().maxMemory()); 
    } 
} 

Los resultados de la ejecución fue el siguiente:

C:\coobird\>java -Xmx64m MaxMemory 
66650112 

C:\coobird\>java -Xmx128m MaxMemory 
133234688 

Esto es usando Java SE 6 versión 1.6.0_12 en Windows .

Aunque los valores son cercanos a 64 MB (67,108,864 bytes) y 128 MB (134,217,728 bytes), no son exactamente así.

+0

Lo he probado y parece ser el valor establecido por -Xmx. Gracias. –

+0

Parece estar cerca, pero no exactamente el valor. – coobird

+0

Quizás los bytes faltantes se reservaron para el espacio PermGen –

3

Y consigo valores que están más lejos del valor -Xmx:

java -Xmx64m MaxMemory 
59703296 

64 * 1024 * 1024 = 67108864

java -Xmx128m MaxMemory 
119341056 

128 * 1024 * 1024 = 134217728

Esa es una 11% de diferencia! (El tuyo es solo el 0.7%; yo gano).

java -version 
java version "1.6.0_22" 
Java(TM) SE Runtime Environment (build 1.6.0_22-b04) 
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode) 
running on Linux 2.6 
1

Veo resultados similares.

-Xmx512m y consigo 455M

-Xmx1024m y consigo 910M

puedo obtener los mismos resultados utilizando ManagementFactory.getMemoryMXBean(). GetHeapMemoryUsage()

Estas discrepancias son demasiado grandes como para ser ignorado.

Cuestiones relacionadas