Coleta de lixo

Folks,

uma duvida porque o metodo finalize só funciona

qdo o comando gc() é invocado no momento em que

o objeto é igual a null não executa por que ?



public class UsoFinalize {

	int codigo;
	String nome;
	

	public void finalize() { 
		 System.out.println("Vou ser coletado!!");
	} 

	public String toString() {
		String retorno =this.codigo+" "+this.nome;
		return retorno ;
	} 
	public static void main (String[] args){
		UsoFinalize u = new UsoFinalize();
		
		u.setCodigo(10);
		u.setNome("Nome");
		System.out.println("mostra="+u.toString());
        u = null;
        System.gc(); 

	}
	
	resultado:
	mostra=10 Nome
        Vou ser coletado!!

se comentado a linha gc()



public class UsoFinalize {

	int codigo;
	String nome;
	

	public void finalize() { 
		 System.out.println("Vou ser coletado!!");
	} 

	public String toString() {
		String retorno =this.codigo+" "+this.nome;
		return retorno ;
	} 
	public static void main (String[] args){
		UsoFinalize u = new UsoFinalize();
		
		u.setCodigo(10);
		u.setNome("Nome");
		System.out.println("mostra="+u.toString());
        u = null;
//        System.gc(); 

	}
	
	resultado:
	mostra=10 Nome

minha duvida qdo o objeto está nulo já não é executado o metodo finalize() ???

se alguém puder me ajudar agradeceria???

Porque quem garante que o garbage collector é executado é a JVM.
Assim:

   System.gc();

Voce esta forcando o gc, mas mesmo com este comando é a JVM que tem o controle.
Flw

Você simplesmente está dizendo para a JVM que é uma boa hora para passar o garbage mas como ele é uma thread de baixo nível você não consegue controlar com comandos, apenas “sugerir” que o mesmo seja executado…

Abraços