1183 votos

¿Cuáles son los parámetros -Xms y -Xmx al iniciar JVM?

Por favor explique el uso de los parámetros Xms y Xmx en las JVM. ¿Cuáles son los valores predeterminados para ellos?

2 votos

Cuando se utiliza -Xmx128m -Xms64m puede alcanzar alrededor de 275m de memoria RES, pero cuando se utiliza -Xmx128m -Xms128m puede alcanzar alrededor de 550m 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?

1558voto

hexacyanide Puntos 15723

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.

14 votos

Entonces, ¿es como cuando el uso de memoria excede más allá de Xmx obtenemos una excepción de falta de memoria de JVM?

66 votos

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.

2 votos

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?

350voto

Rupesh Yadav Puntos 2721

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. :)

22voto

Abner Niu Puntos 141

Esto significa que tu JVM se iniciará con Xms de memoria y podrá usar un máximo de Xmx de memoria.

¡No es preciso! -Xms significa el tamaño de inicio del Heap y -Xmx significa el tamaño máximo del Heap, no toda la memoria que utiliza la JVM.

19voto

Puedes especificarlo en tu IDE. Por ejemplo, para Eclipse en Run ConfigurationsVM arguments. Puedes ingresar -Xmx800m -Xms500m como

Introduce aquí la descripción de la imagen

0 votos

En RubyMine en OSX, está en el menú Ayuda > Editar opciones de VM personalizadas.

16 votos

Esto no responde a la pregunta. La pregunta es acerca de para qué son, no de cómo configurarlos.

0 votos

@Hearen ¿Cómo configurar en Intellij??

14voto

Abhishek Aich Puntos 31

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.

8 votos

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.com

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.

Powered by:

X