[Dicas-L] Memory leak em Java
Data de Publicação: 12 de abril de 2010
2) Blocos de memória: possuem dados que poderiam ser liberados por serem inacessíveis e que, por ?esquecimento?, ainda são referenciados no código mesmo sem estarem sendo usados, não podendo ser liberados.
Um ponteiro é uma variável que aponta para um endereço de memória. É um termo bastante comum em C/C++ e engana-se quem acha que Java não possui ponteiros. Quando um objeto é criado usando new, a variável que recebe o objeto é, na verdade, um ponteiro que aponta para um endereço de memória que contém o objeto.
A função malloc() faz parte da API do C. Sua função é alocar a quantidade de memória desejada (fornecida como parâmetro). O retorno desta função é um ponteiro para a área de memória recém criada.
System.out.println("Bytes livres: "+ Runtime.getRuntime().freeMemory());
Este código fica executando em um loop infinito. A cada iteração do loop, um array de 1000 posições de inteiros é criado. Cada vez que o loop é executado, é mostrada a quantidade de bytes livres. Num primeiro momento você pode pensar: ?esta aplicação vai acabar com a memória da JVM?. Mas na verdade não é isso que acontece. Ao executar o programa, em determinado momento você vai observar a seguinte saída:
Depois de ver este código rodando, você deve estar se perguntando: ?como eu sei quando o garbage collector vai ser executado??. Não é possível saber. O controle da execução do garbage collector é da JVM. Quando a JVM decidir que é hora de executá-lo, ele será executado. Note que executar o garbage collector toda hora não seria recomendável, já que ele ocupa recursos computacionais.