Por favor, explique el uso de los parámetros Xms
y Xmx
en las JVM. ¿Cuáles son los valores por defecto para ellos?
La bandera Xmx
especifica el pool de asignación de memoria máximo para una máquina virtual Java (JVM), mientras que Xms
especifica el pool de asignación de memoria inicial.
Esto significa que tu JVM se iniciará con la cantidad de memoria Xms
y podrá utilizar una cantidad máxima de memoria Xmx
. Por ejemplo, iniciar una JVM como la que se muestra a continuación la iniciará con 256 MB de memoria y permitirá que el proceso utilice 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
La bandera Xms
no tiene valor por defecto, y Xmx
suele tener un valor por defecto de 256 MB. Un uso común de estas banderas es cuando se encuentra un java.lang.OutOfMemoryError
.
Cuando utilice estas configuraciones, tenga en cuenta que estas configuraciones son para el heap de la JVM, y que la JVM puede/va a utilizar más memoria que el tamaño asignado al heap. De la documentación de Oracle:
Ten en cuenta que la JVM utiliza más memoria que sólo el heap. Por ejemplo, los métodos de Java, las pilas de hilos y los manejadores nativos se asignan en memoria separada del heap, así como las estructuras de datos internas de la JVM.
Ejecute el comando java -X
y obtendrá una lista de todas las opciones -X
:
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
, Xmx
así como muchas otras cosas que son muy importantes :)
La pregunta en sí ya ha sido tratada anteriormente. Sólo hay que añadir parte de los valores por defecto.
Según http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
El valor por defecto de Xmx dependerá de la plataforma y de la cantidad de memoria disponible en el sistema.