Por favor explique el uso de los parámetros Xms
y Xmx
en las JVMs. ¿Cuáles son los valores predeterminados para ellos?
Entonces, ¿es como cuando el uso de memoria excede más allá de Xmx que obtenemos la excepción de falta de memoria de la JVM?
Por favor explique el uso de los parámetros Xms
y Xmx
en las JVMs. ¿Cuáles son los valores predeterminados para ellos?
La bandera Xmx
especifica el tamaño máximo del pool de asignación de memoria para una Máquina Virtual de Java (JVM), mientras que Xms
especifica el tamaño inicial del pool de asignación de memoria.
Esto significa que su JVM se iniciará con la cantidad de memoria de Xms
y podrá utilizar un máximo de Xmx
. Por ejemplo, iniciar una JVM como se muestra a continuación la iniciará con 256 MB de memoria y permitirá que el proceso use hasta 2048 MB de memoria:
java -Xms256m -Xmx2048m
La bandera de memoria también puede especificarse en diferentes tamaños, como kilobytes, megabytes, etc.
-Xmx1024k
-Xmx512m
-Xmx8g
La bandera Xms
no tiene un valor predeterminado, y Xmx
típicamente tiene un valor predeterminado de 256 MB. Un uso común para estas banderas es cuando se encuentra un java.lang.OutOfMemoryError
.
Cuando se utilizan estas configuraciones, tenga en cuenta que estas configuraciones son para el heap de la JVM, y que la JVM puede y utilizará más memoria que solo el tamaño asignado al heap. Desde la documentación de Oracle:
Tenga en cuenta que la JVM utiliza más memoria que solo el heap. Por ejemplo, los métodos Java, las pilas de hilos y los punteros nativos se asignan en memoria separada del heap, al igual que las estructuras de datos internas de la JVM.
Entonces, ¿es como cuando el uso de memoria excede más allá de Xmx que obtenemos la excepción de falta de memoria de la JVM?
Sí, eso es correcto. Cuando intenta exceder eso, aunque puede recolectar basura para tratar de liberar suficiente memoria. Si aún no hay suficiente memoria para satisfacer la solicitud y el montón ya ha alcanzado el tamaño máximo, ocurrirá un OutOfMemoryError
.
Cuando estoy usando el marco de ForkJoin, mi computadora se bloquea porque está usando demasiada memoria. ¿Es posible que en OpenJDK no haya un límite duro en la memoria por defecto?
Ejecuta el comando java -X
y obtendrás una lista de todas las opciones -X
:
C:\Users\Admin>java -X
-Xmixed ejecución en modo mixto (predeterminado)
-Xint ejecución en modo interpretado solamente
-Xbootclasspath:
establece la ruta de búsqueda para las clases y recursos de arranque
-Xbootclasspath/a:
añade al final de la ruta de clase de arranque
-Xbootclasspath/p:
coloca al principio de la ruta de clase de arranque
-Xdiag muestra mensajes de diagnóstico adicionales
-Xnoclassgc deshabilita la recolección de basura de clases
-Xincgc habilita la recolección de basura incremental
-Xloggc: registra el estado de la recolección de basura en un archivo con marcas de tiempo
-Xbatch deshabilita la compilación en segundo plano
-Xms establece el tamaño inicial del montón de Java.........................
-Xmx establece el tamaño máximo del montón de Java.........................
-Xss establece el tamaño de la pila de hilos de Java
-Xprof genera datos de perfil de CPU
-Xfuture habilita las verificaciones más estrictas, anticipando el valor predeterminado futuro
-Xrs reduce el uso de señales OS por Java/VM (ver documentación)
-Xcheck:jni realiza verificaciones adicionales para funciones JNI
-Xshare:off no intenta utilizar datos de clase compartidos
-Xshare:auto utiliza datos de clase compartidos si es posible (predeterminado)
-Xshare:on requiere el uso de datos de clase compartidos, de lo contrario falla.
-XshowSettings muestra todas las configuraciones y continúa
-XshowSettings:all muestra todas las configuraciones y continúa
-XshowSettings:vm muestra todas las configuraciones relacionadas con la VM y continúa
-XshowSettings:properties muestra todas las configuraciones de propiedades y continúa
-XshowSettings:locale muestra todas las configuraciones relacionadas con la localización y continúa
Las opciones -X son no estándar y están sujetas a cambios sin previo aviso.
Espero que esto te ayude a entender Xms
, Xmx
al igual que muchas otras cosas que son muy importantes. :)
La pregunta en sí ya ha sido abordada arriba. Solo agregando parte de los valores predeterminados.
Según http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
El valor predeterminado de Xmx dependerá de la plataforma y la cantidad de memoria disponible en el sistema.
Para otros JVM (además de JRockit), consulte esta publicación para determinar los valores predeterminados de Xmx/Xms de su JVM: stackoverflow.com/questions/4667483/…
Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.
2 votos
Cuando se usa
-Xmx128m -Xms64m
, puede alcanzar aproximadamente275m
de memoria RES, pero cuando se usa-Xmx128m -Xms128m
, puede llegar a alrededor de550m
de memoria RES. Al usar Java 8, lo mejor es poner énfasis en el GC y ver qué sucede ...0 votos
Solo por curiosidad, ¿cómo se calcularon los 275m y 550m?