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

1008

Explique el uso Xmsy los Xmxparámetros en las JVM. ¿Cuáles son los valores predeterminados para ellos?

Pankaj
fuente
2
cuando se usa -Xmx128m -Xms64mpuede alcanzar un máximo de 275mRES mem, pero cuando se usa -Xmx128m -Xms128mpuede alcanzar un máximo de 550mRES mem Usar Java 8 Lo mejor es estresar el GC y ver lo que sucede ...
Christophe Roussy

Respuestas:

1360

El indicador Xmxespecifica el grupo de asignación de memoria máxima para una máquina virtual Java (JVM), mientras que Xmsespecifica el grupo de asignación de memoria inicial.

Esto significa que su JVM se iniciará con una Xmscantidad de memoria y podrá usar una Xmxcantidad máxima de memoria. Por ejemplo, al iniciar una JVM como la siguiente, comenzará con 256 MB de memoria y permitirá que el proceso use hasta 2048 MB de memoria:

java -Xms256m -Xmx2048m

El indicador de memoria también se puede especificar en diferentes tamaños, como kilobytes, megabytes, etc.

-Xmx1024k
-Xmx512m
-Xmx8g

El Xmsindicador no tiene un valor predeterminado y, por lo Xmxgeneral, tiene un valor predeterminado de 256 MB. Un uso común para estas banderas es cuando te encuentras con un java.lang.OutOfMemoryError.

Cuando use estas configuraciones, tenga en cuenta que estas configuraciones son para el montón de JVM , y que la JVM puede / usará más memoria que solo el tamaño asignado al montón. De la documentación de Oracle :

Tenga en cuenta que la JVM usa más memoria que solo el montón. Por ejemplo, los métodos Java, las pilas de subprocesos y los identificadores nativos se asignan en memoria separada del montón, así como las estructuras de datos internos de JVM.

hexacianuro
fuente
12
Entonces, es como cuando el uso de la memoria excede más allá de Xmx, obtenemos jvm de excepción de memoria.
Pankaj
59
Si eso es correcto. Cuando intenta superar eso, aunque puede recolectar basura para intentar liberar suficiente memoria. Si todavía no hay suficiente memoria para satisfacer la solicitud y el almacenamiento dinámico ya ha alcanzado el tamaño máximo, OutOfMemoryErrorse producirá un error.
David Conrad
2
Cuando uso el framework ForkJoin, mi computadora se bloquea porque ocupa demasiada memoria. ¿Es posible que en OpenJDK no haya un límite estricto en la memoria por defecto?
Christophe De Troyer
66
Como se aclaró en ¿Java -Xmx 1G significa 1 GB o 2 ^ 30 B? , la forma inequívoca de expresar con cuánta memoria comienza con -Xms256m"256 MiB", no "256 MB", ya que utiliza potencias binarias en lugar de potencias de diez. Ver en.wikipedia.org/wiki/Binary_prefix . Además, debido a que se reserva un espacio inutilizable para un grupo adicional de espacio de Survivor, la cantidad de memoria realmente disponible Runtime.getRuntime().maxMemory()es menor que el valor especificado a través de -Xmx
nealmcb
1
Una guía útil de errores comunes relacionados con el tamaño de almacenamiento
ctrlplusb
315

Ejecute el comando java -Xy obtendrá una lista de todas las -Xopciones:

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

Las opciones -X no son estándar y están sujetas a cambios sin previo aviso.

Espero que esto te ayude a entender Xms, Xmxasí como muchas otras cosas que más importan. :)

Rupesh Yadav
fuente
1
Aprendí un nuevo comando hoy, gracias @RupeshYadav
jumping_monkey
18

Puede especificarlo en su IDE. Por ejemplo, para Eclipse en Ejecutar configuracionesargumentos de VM . Puedes ingresar -Xmx800m -Xms500mcomo

Ingrese la descripción de la imagen aquí

Mehrez BEN MOHAMED
fuente
En RubyMine en OSX, está en el menú Ayuda> Editar opciones de VM personalizadas.
Jon Schneider
8
Esto no responde la pregunta. La pregunta es para qué sirven, no cómo configurarlos.
Capitán Man
@Hearen ¿Cómo separarse en intellij ??
13

La pregunta en sí ya se ha abordado anteriormente. Simplemente agregue 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.

Abhishek Aich
fuente
8
Para otras JVM (además de JRockit), vea esta publicación para determinar los valores Xmx / Xms predeterminados de su JVM: stackoverflow.com/questions/4667483/…
Ogre Psalm33
3

- Tamaño de almacenamiento dinámico inicial de Xms para el inicio; sin embargo, durante el proceso de trabajo, el tamaño de almacenamiento dinámico puede ser inferior a -Xms debido a la inactividad de los usuarios o las iteraciones de GC. Este no es un tamaño de almacenamiento dinámico mínimo requerido.

-Xmx tamaño máximo de almacenamiento dinámico

lazylead
fuente