Garbage Collection O que é Garbage Collector? É o coletor de lixo que é utilizado pela JVM para a limpeza da memória. Não se pode prever quando o mesmo será executado, porém, pode solicitar explicitamente (através do método System.gc();) a ação do garbage colector, o qual não necessariamente será executado no momento da solicitação.
Garbage Collection Como Funciona? O Coletor de lixo funciona da seguinte forma: de tempos em tempos, o garbage colector ( quando acionado pela JVM) verifica se todos os objetos alocados na memória estão sendo referenciados por alguma variável, caso não estejam, o mesmo remove o objeto da memória para que o espaço possa ser reutilizado.
Garbage Collection Código Para Constatação public class Lixo{ public static void main(String[] args) throws Exception { int cont=0; int[] array = null; while(true) { array = new int[1000]; System.out.println("Bytes livres: "+Runtime.getRuntime().freeMemory()); Thread.sleep(200); cont++; if(cont==100){ break; }
Garbage Collection O que aconteceu? Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres:
Garbage Collection As vantagens # liberdade do programador que não esta mais obrigado a ficar atento a detalhes de memória; # há menos bugs de gerenciamento de memória; # gerenciamento automático é mais eficiente que o manual.
Garbage Collection Desvantagens: # O desenvolvedor tende a estar mais desatento em relação a detalhes de memória; # O gerenciador automático apresenta limitações. # O processo reduz o desempenho do aplicativo
Garbage Collection Código com solicitação da reciclagem de memória //... while(true) { //... if(cont==50){ System.out.println("\n Solicitando...\n"); System.gc(); } if(cont==168){ System.out.println("\n garbage colector acionado pela JVM...\n"); } //... }
Garbage Collection Resultado solicitando... coletor acionado pela JVM Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres: Bytes livres:
Garbage Collection O método finalize O método finalize() é chamado pelo coletor de lixo para realizar limpeza de terminação sobre um objeto um pouco antes de o coletor de lixo reivindicar a memória do objeto. Um problema com relação a este método é que não há garantias de o coletor de lixo executar em um momento pré definido.
Garbage Collection Conclusão Em informática poucas vezes uma solução não cria novos problemas. Isto é, o garbage collector é um processo relativamente demorado e de alta prioridade que tem impacto em todo o programa que esta sendo executado. Este processo é automático (promovido pela jvm), mas o programador pode solicitar a atuação do mesmo através do comando System.gc(). Obs.: Não será necessariamente executado no momento da solicitação.
Garbage Collection Bibliografia #Java Como programar 6ª edição # Estrutura de dados e Algoritmos em Java 4ª Edição # Foruns e Pesquisas na internet