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 JVMs. ¿Cuáles son los valores predeterminados para ellos?

2 votos

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

1558voto

hexacyanide Puntos 15723

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.

14 votos

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?

66 votos

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.

2 votos

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?

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

22voto

Abner Niu Puntos 141

“Esto significa que su JVM se iniciará con una cantidad de memoria Xms y podrá utilizar un máximo de Xmx de memoria.”

¡No es preciso! -Xms significa el tamaño inicial del montón (-heap) y -Xmx significa el tamaño máximo del montón (-heap), no toda la memoria que utiliza la JVM.

19voto

Puedes especificarlo en tu IDE. Por ejemplo, para Eclipse en Configuraciones de EjecuciónArgumentos de VM. Puedes ingresar -Xmx800m -Xms500m como

Introduce aquí la descripción de la imagen

0 votos

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

16 votos

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

0 votos

@Hearen ¿Cómo configurarse en Intellij?

14voto

Abhishek Aich Puntos 31

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.

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