Respostas:
O sinalizador Xmx
especifica o conjunto máximo de alocação de memória para uma Java virtual machine (JVM), enquanto Xms
especifica o conjunto inicial de alocação de memória.
Isso significa que sua JVM será iniciada com Xms
quantidade de memória e poderá usar o máximo de Xmx
quantidade de memória. Por exemplo, iniciar uma JVM como a seguir, iniciará com 256 MB de memória e permitirá que o processo use até 2048 MB de memória:
java -Xms256m -Xmx2048m
O sinalizador de memória também pode ser especificado em tamanhos diferentes, como kilobytes, megabytes e assim por diante.
-Xmx1024k
-Xmx512m
-Xmx8g
O Xms
sinalizador não tem valor padrão e Xmx
normalmente possui um valor padrão de 256 MB. Um uso comum para esses sinalizadores é quando você encontra umjava.lang.OutOfMemoryError
.
Ao usar essas configurações, lembre-se de que essas configurações são para o heap da JVM e que a JVM pode / utilizará mais memória do que apenas o tamanho alocado para o heap. Da documentação da Oracle :
Observe que a JVM usa mais memória do que apenas a pilha. Por exemplo, métodos Java, pilhas de encadeamentos e identificadores nativos são alocados na memória separada do heap, bem como nas estruturas de dados internas da JVM.
OutOfMemoryError
isso ocorrerá.
-Xms256m
é "256 MiB", não "256 MB", pois utiliza potências binárias em vez de potências de dez. Veja en.wikipedia.org/wiki/Binary_prefix . Além disso, porque algum espaço inutilizável é reservado para uma piscina extra de espaço Survivor, a quantidade de memória realmente disponível de acordo com Runtime.getRuntime().maxMemory()
é menor do que o valor especificado através de -Xmx
Execute o comando java -X
e você obterá uma lista de todas as -X
opções:
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 padrão e estão sujeitas a alterações sem aviso prévio.
Espero que isso ajude você a entender Xms
, Xmx
assim como muitas outras coisas que mais importam. :)
Você pode especificá-lo em seu IDE. Por exemplo, para Eclipse em Executar configurações → argumentos da VM . Você pode entrar -Xmx800m -Xms500m
como
A questão em si já foi abordada acima. Apenas adicionando parte dos valores padrão.
Conforme http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
O valor padrão de Xmx dependerá da plataforma e da quantidade de memória disponível no sistema.
-Xmx128m -Xms64m
pode pico em torno275m
RES mem, mas quando se utiliza-Xmx128m -Xms128m
pode pico em torno550m
RES mem Usando Java 8 Melhor coisa é de salientar a GC e olhar para o que acontece ...