Se eu executar um programa java, a VM inicialmente aloca memória para o heap, certo?
toda vez que a memória usada levaria mais do que disponível, o heap é aumentado, certo?
é possível que o heap fique menor, uma vez que menos memória seja usada?
obrigado!
Respostas:
5 para resposta № 1Sim, o coletor de lixo é livre para reduzir o tamanhode heap se descobrir depois de poucas coletas que o aplicativo demanda por memória muito menor que o heap configurado. Você pode observar este recurso no VisualVM, aqui testado com uma instância do Tomcat ab
:
Como você pode ver o tamanho do heap (série laranja)muda basicamente após cada GC (queda na série azul). Às vezes, o tamanho do heap aumenta, às vezes diminui. A JVM está livre para ajustar o tamanho com base no uso real (aqui, o tamanho total do heap foi definido como 1G).
0 para resposta № 2
Bem, o processo Java começa com uma inicialalocação de memória para heap e uma alocação máxima para o dito heap. É o que você passa através dos argumentos de linha de comando -Xms e Xmx jvm, que não podem mudar durante a execução do processo.
A quantidade real de memória usada por suas instâncias de objeto pode diminuir após uma coleta de lixo.