Explique o uso de parâmetros Xms
e Xmx
em JVMs. Quais são os valores padrão para eles?
A bandeira Xmx
especifica o pool máximo de alocação de memória para uma máquina virtual Java (JVM), enquanto Xms
especifica o pool inicial de alocação de memória.
Isto significa que a sua JVM será iniciada com "Xms" quantidade de memória e poderá utilizar um máximo de "Xmx" quantidade de memória. Por exemplo, iniciar um JVM como abaixo iniciará com 256 MB de memória e permitirá que o processo utilize até 2048 MB de memória:
java -Xms256m -Xmx2048m
A bandeira de memória também pode ser especificada em diferentes tamanhos, tais como kilobytes, megabytes, e assim por diante.
-Xmx1024k
-Xmx512m
-Xmx8g
A bandeira Xms
não tem valor padrão, e Xmx
normalmente tem um valor padrão de 256 MB. Uma utilização comum para estas bandeiras é quando você encontra um `java.lang.OutOfMemoryError'.
Ao usar estas configurações, tenha em mente que estas configurações são para o heap da JVM, e que a JVM pode/virá usar mais memória do que apenas o tamanho alocado para o heap. A partir da documentação da Oracle:
Note que a JVM usa mais memória do que apenas a pilha. Por exemplo, métodos Java, pilhas de threads e handles nativos são alocados na memória separados do heap, bem como estruturas de dados internas da JVM.
Execute o comando java -X' e você terá uma lista de todas as opções
-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
As opções -X não são standard e estão sujeitas a alterações sem aviso prévio.
Espero que isto o ajude a entender "Xms", "Xmx", assim como muitas outras coisas que mais importam. :)
A questão em si já foi abordada acima. Apenas adicionando parte dos valores padrão.
De acordo com http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
O valor padrão do Xmx dependerá da plataforma e da quantidade de memória disponível no sistema.