Como é determinado o tamanho padrão de heap Java?

se omitir a opção-Xmxn da linha de comandos Java, é usado um valor por omissão. De acordo com Java documentation "o valor por omissão é escolhido no tempo de execução com base na configuração do sistema".

Que configuração do sistema influencia o valor por omissão?

Author: Peter Mortensen, 2011-01-12

7 answers

Nos sistemas Windows, pode usar o seguinte comando para descobrir os valores por omissão no sistema onde as suas aplicações são executadas.

Java-XX:+PrintFlagsFinal-version / findstr HeapSize

Procura as opções MaxHeapSize (para -Xmx) e InitialHeapSize para -Xms.

Num sistema Unix / Linux, você pode fazer

Java-XX:+PrintFlagsFinal-version / grep HeapSize

Eu acredito que a saída resultante está em bytes.

 399
Author: stones333, 2016-10-14 09:52:45
De acordo com a ergonomia do coletor de lixo]:

Tamanho inicial do heap:

Maior de 1 / 64 da memória física da Máquina Na máquina ou algo assim. mínimo razoável. Antes de J2SE 5.0, o tamanho inicial padrão do heap era um mínimo razoável, que varia plataforma. Podes anular isto. por omissão, usando a linha de comandos-Xms Opcao.

Tamanho máximo do heap:

Menor que 1 / 4 do físico. memória ou 1GB. Antes do J2SE 5.0, o o tamanho máximo padrão do heap era de 64MB. Poderá sobrepor este valor por omissão usando a opção linha de comandos-Xmx.

Actualizar:

Como foi apontado por Tom Anderson em seu comentário, o acima é para máquinas de classe servidor. Da Ergonomia na máquina virtual JavaTM 5.0:

Na plataforma J2SE versão 5.0 a classe da máquina referida como a a máquina da classe do servidor foi definida como uma máquina com

  • 2 ou mais processadores físicos
  • 2 ou mais Gbytes de memória física

Com excepção das plataformas de 32 bits executar uma versão das janelas sistema. Em todos os outros plataformas os valores por omissão são os igual aos valores predefinidos para a versão 1.4.2.

Na plataforma J2SE versão 1.4.2 by por omissão, as seguintes selecções foram made

  • tamanho inicial da pilha de 4 Mbyte
  • tamanho máximo da pilha 64 Mbyte
 91
Author: dogbane, 2017-01-03 10:18:36

Isto é alterado com Java 6 update 18 .

Assumindo que temos mais de 1 GB de memória física (bastante comum nos dias de hoje), é sempre 1/4 da sua memória física.
 23
Author: ernesto, 2018-03-16 00:45:41
O Ernesto tem razão. De acordo com o link que ele postou [1]:

A configuração actualizada do HEAP JVM do cliente

No JVM do cliente...
  • O tamanho máximo padrão de heap é metade da memória física até um tamanho de memória física de 192 megabytes e, caso contrário, um quarto da memória física até um tamanho de memória física de 1 gigabyte.

    Por exemplo, se a sua máquina tem 128 megabytes de memória física, então o tamanho máximo de heap é 64 megabytes, e maior ou igual a 1 gigabyte de memória física resulta em um tamanho máximo de heap de 256 megabytes.

  • O tamanho máximo de heap não é realmente usado pelo JVM a menos que seu programa cria objetos suficientes para requerê-lo. Uma quantidade muito menor, denominada O tamanho inicial do heap, é alocada durante a inicialização do JVM. ...

  • ...
  • a ergonomia da configuração do heap do servidor JVM é agora a mesma do Cliente, excepto que o valor por omissão o tamanho máximo de heap para JVMs de 32 bits é de 1 gigabyte, correspondendo a um tamanho de memória física de 4 gigabytes, e para JVMs de 64 bits é de 32 gigabytes , correspondendo a um tamanho de memória física de 128 gigabytes.

[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

 14
Author: apl, 2017-11-06 00:59:04

O valor por omissão é escolhido no tempo de execução com base na configuração do sistema

Veja a documentação Página

Tamanho Predefinido Do Heap

A menos que os tamanhos inicial e máximo de heap sejam especificados na linha de comando, são calculados com base na quantidade de memória na máquina.

  1. Client JVM Default tamanho inicial e máximo do Heap:

    O tamanho máximo de pilha por omissão é metade do tamanho físico memória de até um tamanho de memória física 192 megabytes (MB) e, caso contrário um quarto da memória física, até um tamanho de memória física de 1 gigabyte (GB).

  2. Servidor JVM tamanho inicial e máximo de Heap por omissão:

    Em JVMs de 32 bits, o tamanho máximo padrão de heap pode ser até 1 GB Se houver 4 GB ou mais de memória física . em JVMs de 64 bits, o tamanho máximo padrão de heap pode ser até 32 GB Se houver 128 GB ou mais de física memória

Que configuração do sistema influencia o valor por omissão?

Você pode especificar a inicial e máximo tamanhos de pilha usando as bandeiras -Xms (inicial tamanho de heap) e -Xmx (tamanho máximo de pilha). Se você sabe o quanto a pilha do seu aplicativo precisa para funcionar bem, você pode definir -Xms e -Xmx para o mesmo valor

 7
Author: Ravindra babu, 2016-10-13 16:05:04

Para o IBM JVM, o comando é o seguinte:

java -verbose:sizes -version

Para mais informações sobre o SDK IBM para Java 8 - http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?lang=en

 5
Author: n0mer, 2018-03-16 00:46:40

Java 8 toma mais de 1 / 6 da sua memória física para o seu Xmssize (HeapSize mínimo) e menos de 1/4 da sua memória física para o seu-Xmxsize (HeapSize máximo).

Você pode verificar o tamanho predefinido de heap Java por:

Em Janelas:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

In Linux:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Que configuração do sistema influencia o valor por omissão?

A tua memória física e o teu Java versao.

 5
Author: Sarat Chandra, 2018-03-16 00:48:03