E N D
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.
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.
Código Para Constatação publicclass Lixo{ publicstaticvoid main(String[] args) throws Exception { int cont=0; int[] array = null; while(true) { array = newint[1000]; System.out.println("Bytes livres: "+Runtime.getRuntime().freeMemory()); Thread.sleep(200); cont++; if(cont==100){ break; } } } }
O que aconteceu? Bytes livres: 1703304 Bytes livres: 1699288 Bytes livres: 1606024 Bytes livres: 1591520 Bytes livres: 1510304 Bytes livres: 1908872 Bytes livres: 1892808
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.
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
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"); } //... }
Resultado solicitando... coletor acionado pela JVM Bytes livres: 1871664 Bytes livres: 1910032 Bytes livres: 1402408 Bytes livres: 1810528 Bytes livres: 1897984 Bytes livres: 1398392 Bytes livres: 1792008 Bytes livres: 1798752 Bytes livres: 1907928 Bytes livres: 1696288 Bytes livres: 1692072 Bytes livres: 1899896 Bytes livres: 1596856 Bytes livres: 1406424
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.
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.
Bibliografia # Java Como programar 6ª edição # Estrutura de dados e Algoritmos em Java 4ª Edição # Foruns e Pesquisas na internet