Respuestas:
El indicador Xmx
especifica el grupo de asignación de memoria máxima para una máquina virtual Java (JVM), mientras que Xms
especifica el grupo de asignación de memoria inicial.
Esto significa que su JVM se iniciará con una Xms
cantidad de memoria y podrá usar una Xmx
cantidad 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 Xms
indicador no tiene un valor predeterminado y, por lo Xmx
general, 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.
OutOfMemoryError
se producirá un error.
-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
Ejecute el comando java -X
y obtendrá una lista de todas las -X
opciones:
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 más importan. :)
Puede especificarlo en su IDE. Por ejemplo, para Eclipse en Ejecutar configuraciones → argumentos de VM . Puedes ingresar -Xmx800m -Xms500m
como
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.
- 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
-Xmx128m -Xms64m
puede alcanzar un máximo de275m
RES mem, pero cuando se usa-Xmx128m -Xms128m
puede alcanzar un máximo de550m
RES mem Usar Java 8 Lo mejor es estresar el GC y ver lo que sucede ...