Quando você termina de usar um objeto você, simplesmente para de acesse-lo ou atribui null a ele.
A coleta de lixo é dividida em duas partes:
I - separação de objetos vivos de objetos mortos.
II - E depois limpa a memoria utilizada por objetos mortos.
Os objetos vivos são aqueles que podem ser alcançado por um código em execução.
Os objetos mortos são os que não podem ser alcançado por um código em execução. Ou seja é o lixo a ser coletado.
Para interagir com o Garbage Collector temos alguma métodos da classe Runtime:
- gc() - solicita a execução do Garbage Collector.
- runFinalization() - solicita a finalização de que não são alcançáveis.
- freeMemory() - retorna um estimativa de bytes livre na memoria do sistema.
- totalMemory() - retorna o total de bytes da memoria do sistema.
- maxMemory() - retorna quantidade máxima de memoria em bytes que a maquina virtual sempre tentara utilizar.
Segue uma classe para exemplifica a utilização do Garbage Collector.
import java.util.ArrayList;
import java.util.List;
// Classe Coletor
public class Coletor {
// Carregar memoria
public static long carregarMemoria() {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 100_000; i++) {
list.add(i);
}
// Retornando quantidade livre de memoria.
return Runtime.getRuntime().freeMemory();
}
// Método principal
public static void main(String[] args) {
// Instanciando a classe Runtime
Runtime rt = Runtime.getRuntime();
int MB = 1_048_576; // Total em bytes em 1MB
// Saber a quantidade disponivel em MB
double total = rt.maxMemory() / MB;
// Calculando quantidade de memoria apois execução
//do metodo de carregar memoria.
double inicio = total - (carregarMemoria()/MB);
// Exibindo valores.
System.out.println(inicio);
System.out.println(total);
// Finalizando
rt.runFinalization();
// Chamando o GC - Garbage Collector
rt.gc();
// Exibindo total de memoria.
double fim = total - (rt.freeMemory()/MB);
System.out.println("Inicio: " + inicio + "\nFim: " + fim);
}
}
Baixe o arquivo no seguinte link:
Fontes:
https://www.youtube.com/watch?v=f3xgQ-IjZas&list=PLA03DEA5320ECBF85
Nenhum comentário:
Postar um comentário