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
Respuesta
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í.
Lo he probado y parece ser el valor establecido por -Xmx. Gracias. –
Parece estar cerca, pero no exactamente el valor. – coobird
Quizás los bytes faltantes se reservaron para el espacio PermGen –
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
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.
- 1. El tiempo máximo de ejecución en phpMyadmin
- 2. espacio de almacenamiento dinámico de Java
- 3. solr - espacio de almacenamiento dinámico de java
- 4. Máximo tiempo de ejecución problema
- 5. ¿Puede el tamaño de almacenamiento dinámico de JVM ser dinámico?
- 6. Configuración del tamaño del almacenamiento dinámico de JVM en el tiempo de ejecución
- 7. Enlace de tiempo de ejecución estático/dinámico
- 8. drupal tiempo de ejecución máximo de cron
- 9. C#: elenco de tiempo de ejecución dinámico
- 10. Tiempo máximo de ejecución para JavaScript
- 11. Superado el tiempo máximo de ejecución en Google Apps Script
- 12. efecto secundario para aumentar maxpermsize y el tamaño máximo de almacenamiento dinámico
- 13. Diferencia entre el enlace dinámico en tiempo de carga y el enlace dinámico en tiempo de ejecución
- 14. ¿Puedo (y alguna vez quiero) establecer el tamaño de almacenamiento dinámico máximo en .net?
- 15. Agregar miembros a un objeto dinámico en tiempo de ejecución
- 16. set_time_limit (0) y el "tiempo máximo de ejecución" PHP
- 17. Establecer el tiempo máximo de ejecución para exec() específicamente
- 18. ¿Puede un programa Java detectar que se está agotando en el espacio de almacenamiento dinámico?
- 19. ¿Puedo establecer el tamaño máximo de almacenamiento dinámico de Java para ejecutar desde un archivo jar?
- 20. Php trapping error de tiempo máximo de ejecución
- 21. Método de ejecución en dinámico
- 22. ¿Hay alguna sobrecarga en tiempo de ejecución para leer solo?
- 23. curl_exec tiempo máximo de ejecución: ¿qué lo está causando?
- 24. Cómo aumentar el espacio de almacenamiento dinámico de Java para una aplicación de tomcat
- 25. Aumentar el tamaño del almacenamiento dinámico en Java
- 26. Diferencia entre tiempo de carga y enlace dinámico en tiempo de ejecución
- 27. Aumento del tamaño máximo de almacenamiento dinámico de JVM para aplicaciones con uso intensivo de memoria
- 28. Descripción del tamaño máximo de almacenamiento dinámico de JVM: 32 bits frente a 64 bits
- 29. Configuración de espacio de almacenamiento dinámico Java bajo Maven 2 en Windows
- 30. Mejores formas de manejar el tiempo máximo de ejecución para hilos (en Java)
Duplicado de http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-from-the-jvm? – Pool
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