Por favor explique el uso de los parámetros Xms
y Xmx
en las JVM. ¿Cuáles son los valores predeterminados para ellos?
Entonces, ¿es como cuando el uso de memoria excede más allá de Xmx obtenemos una excepción de falta de memoria de JVM?
Por favor explique el uso de los parámetros Xms
y Xmx
en las JVM. ¿Cuáles son los valores predeterminados para ellos?
La bandera Xmx
especifica el grupo de asignación de memoria máxima para una Máquina Virtual de Java (JVM), mientras que Xms
especifica el grupo de asignación de memoria inicial.
Esto significa que su JVM se iniciará con cantidad de memoria Xms
y podrá usar un máximo de cantidad de memoria 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 se puede especificar en diferentes tamaños, como kilobytes, megabytes, y así sucesivamente.
-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 identificadores nativos se asignan en memoria separada del heap, así como las estructuras de datos internas de la JVM.
Entonces, ¿es como cuando el uso de memoria excede más allá de Xmx obtenemos una excepción de falta de memoria de JVM?
Sí, eso es correcto. Cuando intenta superarlo, aunque puede recopilar basura para tratar de liberar suficiente memoria. Si todavía no hay suficiente memoria para satisfacer la solicitud y el montón ya ha alcanzado el tamaño máximo, se producirá un error de OutOfMemoryError
.
Cuando estoy usando el framework ForkJoin mi computadora se bloquea porque está utilizando 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 (por defecto)
-Xint solo ejecución en modo interpretado
-Xbootclasspath:
establecer ruta de búsqueda para clases y recursos de arranque
-Xbootclasspath/a:
agregar al final del camino de clase de arranque
-Xbootclasspath/p:
anteponer al principio del camino de clase de arranque
-Xdiag mostrar mensajes de diagnóstico adicionales
-Xnoclassgc desactivar la recolección de basura de clases
-Xincgc activar la recolección de basura incremental
-Xloggc: registrar estado de GC en un archivo con marcas de tiempo
-Xbatch desactivar la compilación en segundo plano
-Xms establecer tamaño inicial del montón de Java.........................
-Xmx establecer tamaño máximo del montón de Java.........................
-Xss establecer tamaño de pila de hilo de Java
-Xprof generar datos de perfil de CPU
-Xfuture habilitar verificaciones más estrictas, anticipando el valor predeterminado futuro
-Xrs reducir el uso de señales del sistema operativo por Java/VM (ver documentación)
-Xcheck:jni realizar verificaciones adicionales para funciones JNI
-Xshare:off no intentar usar datos de clase compartidos
-Xshare:auto usar datos de clase compartidos si es posible (por defecto)
-Xshare:on requerir el uso de datos de clase compartidos, o si no, fallar.
-XshowSettings mostrar todos los ajustes y continuar
-XshowSettings:all mostrar todos los ajustes y continuar
-XshowSettings:vm mostrar todos los ajustes relacionados con la VM y continuar
-XshowSettings:properties mostrar todos los ajustes de propiedades y continuar
-XshowSettings:locale mostrar todos los ajustes relacionados con el idioma y continuar
Las opciones -X no son estándar y están sujetas a cambios sin previo aviso.
Espero que esto te ayude a entender Xms
, Xmx
y muchas otras cosas que son las más importantes. :)
La pregunta en sí ya ha sido abordada anteriormente. 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 utiliza
-Xmx128m -Xms64m
puede alcanzar alrededor de275m
de memoria RES, pero cuando se utiliza-Xmx128m -Xms128m
puede alcanzar alrededor de550m
de memoria RES. al usar Java 8 Lo mejor es sobrecargar el recolector de basura y observar qué sucede ...0 votos
Simplemente por curiosidad, ¿cómo se calcularon los 275m y 550m?