Gerenciamento de memoria da JVM

6 respostas
F

Bom dia pessoal,

Eu tenho uma aplicacao GIS em Swing que carrega muitos tipos diferentes de mapas e eu sempre acabo utilizando uns 300 MB de memoria do sistema operacional.

Eu queria otimizar a aplicacao para que o GC pudesse liberar uma parte dessa memoria na medida que o usuario desabilitasse ou apagasse alguns mapas utilizados pela aplicacao. Entao, meu chefe disse que isso nao iria funcionar, por que uma vez que a JVM adquire a memoria do SO (windows), ela nao libera nunca mais, sendo que o GC somente libera memoria dentro da JVM para que novos objectos possam ser criados
sem utilizar mais memoria do SO.

Achei isso muito estranho e achei que meu chefe viajou, para mim a funcao do GC sempre foi liberar memoria do SO para manter a aplicacao sob controle.

Abraços.

6 Respostas

ViniGodoy

Sim, seu chefe viajou.

Uma vez que o objeto fique sem referências, a memória dele é liberada. A liberação pode não ser instantânea, mas ocorre bem rapidamente.

alexborges

vc esta fazendo essa verificanão pelo taskmgr do windows, se for isso, mesmo aplicação liberando grande parte da memoria
o taskmgr não vai mostrar que o processo liberou aquela quantia de memoria, só vai fazer isso quando outro processo solicitar aquela memoria

Luiz_Gustavo

Olá!

Existem algumas aplicações para gerenciamento de memória da JVM, mas existe uma aplicação de exemplo, que vem na instalação do JDK, que mostra a utilização de memória da JVM.
Não sei se você já conhecia, ou se te ajuda em alguma coisa em sua avaliação, mas :

[JAVA_HOME]\demo\management\MemoryMonitor

Legal que ela mostra a quantidade de memória em cada área do heap.

Abraços!!

nbluis

Na verdade isso que você disse, de a memória não ser desalocada pelo java para o SO eu ja tinha ouvido falar.

Mas não consegui achar referências para poder ter certeza. (também não procurei tanto assim)

Mas uma coisa que você pode fazer, é talvez um tuning na GC, customizando o algoritimo de coleta para a sua necessidade.

Aqui tem algumas referências
http://java.sun.com/docs/hotspot/gc1.4.2/

F

Obrigado pessoal, vou argumentar com meu chefe e dedicar um tempo fazendo tunning

victorwss

Já tive esse problema de uma aplicação em java que consome muita memória fica lenta e disparando várias falhas de páginas no SO. Porém, mesmo liberando quase tudo para o GC depois, ela continuou lenta por causa de falhas de páginas no SO!

Vai ver que isso é algum tipo de estratégia de implementação (ou bug) da JVM.

Exemplo disso: Tentem carregar com o netbeans 6, uns 100 arquivos de código-fonte de tamanho razoavelmente grande. Comece a editá-los aleatoriamente por um tempo e depois feche todos. Mesmo se depois de fechar todos, você só editar um hello world, o Netbeans vai ser praticamente inutilizável de tão lerdo que vai ficar.

Criado 25 de janeiro de 2008
Ultima resposta 26 de jan. de 2008
Respostas 6
Participantes 6