Quais são os parâmetros -Xms e -Xmx ao iniciar a JVM?


1008

Por favor, explique o uso de Xmse Xmxparâmetros nas JVMs. Quais são os valores padrão para eles?


2
quando se utiliza -Xmx128m -Xms64mpode pico em torno 275mRES mem, mas quando se utiliza -Xmx128m -Xms128mpode pico em torno 550mRES mem Usando Java 8 Melhor coisa é de salientar a GC e olhar para o que acontece ...
— Christophe Roussy

Respostas:


1360

O sinalizador Xmxespecifica o conjunto máximo de alocação de memória para uma Java virtual machine (JVM), enquanto Xmsespecifica o conjunto inicial de alocação de memória.

Isso significa que sua JVM será iniciada com Xmsquantidade de memória e poderá usar o máximo de Xmxquantidade 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 Xmssinalizador não tem valor padrão e Xmxnormalmente 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.


12
Assim, quando o uso da memória excede o Xmx, obtemos o jvm com exceção da memória.
— Pankaj

59
Sim esta correto. Quando tenta exceder isso, embora possa coletar lixo para tentar liberar memória suficiente. Se ainda não houver memória suficiente para atender à solicitação e o heap já tiver atingido o tamanho máximo, OutOfMemoryErrorisso ocorrerá.
— David Conrad

2
Quando estou usando a estrutura ForkJoin, meu computador trava porque está consumindo muita memória. É possível que no OpenJDK não haja limite rígido na memória por padrão?
— Christophe De Troyer

6
Conforme esclarecido em java -Xmx 1G significa 1 GB ou 2 ^ 30 B? , a maneira inequívoca de expressar quanta memória você começa com via -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
— nealmcb

1
Um guia útil de erros comuns relacionados ao tamanho da pilha: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
— ctrlplusb

315

Execute o comando java -Xe você obterá uma lista de todas as -Xopçõ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, Xmxassim como muitas outras coisas que mais importam. :)


1
Aprendi um novo comando hoje, obrigado @RupeshYadav
— jumping_monkey 14/12/19

18

Você pode especificá-lo em seu IDE. Por exemplo, para Eclipse em Executar configurações → argumentos da VM . Você pode entrar -Xmx800m -Xms500mcomo

Digite a descrição da imagem aqui


No RubyMine no OSX, está no menu Ajuda> Editar opções personalizadas da VM.
— Jon Schneider

8
Isso não responde à pergunta. A questão é sobre para que servem, não como defini-los.
— Captain Man

@Hearen Como se separar em intellij ??


3

-Xms tamanho de heap inicial para a inicialização, no entanto, durante o processo de trabalho, o tamanho de heap pode ser menor que -Xms devido à inatividade dos usuários ou iterações de GC. Esse não é um tamanho mínimo necessário de heap.

-Xmx tamanho máximo de heap

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.