Alexandro Félix

"Conhecimento é poder." (Francis Bacon)

Memory Leak. Como isto ocorre em Java?

leave a comment »

Em termos gerais memory leak(em bom português, “Vazamento de Memória”) ocorre quando uma aplicação aloca objetos em memória, e não libera o espaço alocado quando os objetos não são mais necessários.

Em java isto ocorre quando o GC é executado, porém não é capaz de coletar objetos obsoletos existente no java heap.

Quando o GC é executado, seja ele full ou minor, é realizado um teste de alcance em cada objeto contido na área em que o GC é executado. Caso o objeto não seja alcançável, o GC remove tal objeto da heap liberando assim, o espaço que estava alocado em memória. Contudo, se um objeto é criado, e sua referência não é tratada de forma correta, o mesmo continua sendo referenciado e “passando” no “teste de alcance” realizado pelo GC. Este objeto portanto, não será removido, pois o GC entende que aquele objeto é importante ainda para sua aplicação. Se isto ocorre com vários objetos, você certamente, terá seu heap repleto de objetos que não serão removidos devido às referências mantidas, causando assim um inevitável estouro de memória ao tentar alocar mais objetos. Isto fará com que a JVM para sua execução devido ao famoso erro de OutOfMemory.

Como faço para analisar erros de OutOfMemory e apontar possíveis pontos de memory leak?

Este assunto será abordado no próximo post.

Abraço a todos.

Alexandro Félix.

 

Written by rideick

Outubro 7, 2010 às 12:19 pm

Publicado em Java

Tagged with , , , , , , ,

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: