Garbage Collection - Este código é elegível para o GC?

7 respostas
A

A referência recebeDataFormatada é elegível para o GC? O que fazer se sim?

public static void main(String[] args) {

		String data = "28/08/2010"; //se tirar por ex: 21:19:50 dará java.text.ParseException
		SimpleDateFormat dataFormatada = new SimpleDateFormat("dd/MM/yyyy");  //HH:mm:ss
		Date recebeDataFormatada = null;  
		try{  
			recebeDataFormatada = dataFormatada.parse(data);  
		}catch(ParseException e) {  
		    e.printStackTrace();  //imprimi a stack trace
		}  
		System.out.println(recebeDataFormatada);  
	}

7 Respostas

ViniGodoy

Só depois que o main acaba.

A

Oi Vini, como vai?

Até aí eu já sabia… Só depois q o main acaba pois o mesmo está dentro do método main… Mas o q fazer daí então?

evertonsilvagomesjav

andredecotia:
Oi Vini, como vai?

Até aí eu já sabia… Só depois q o main acaba pois o mesmo está dentro do método main… Mas o q fazer daí então?

Fazer o que?

yastorm

Acredito que não tenha nada o que fazer. Você não tem controle sobre o GC.

ViniGodoy

Você pode declarar a variável fora do main.

Por que você quer impedir que seja coletada?

B

Se a pergunta fosse algo do tipo:
Durante a execução do programa, a variável recebeDataFormatada é elegível para o GC? SIM/NAO

Acredito que seria NAO, pois a variável aponta para o objeto até o fim do método main. E neste caso, quando o main finaliza o programa também se encerra.

Agora se o código executasse alguma thread, então seria SIM.
Exemplo:

public static void main(String[] args) {  
		  
        String data = "28/08/2010"; //se tirar por ex: 21:19:50 dará java.text.ParseException  
        SimpleDateFormat dataFormatada = new SimpleDateFormat("dd/MM/yyyy");  //HH:mm:ss  
        Date recebeDataFormatada = null;    
        try{    
            recebeDataFormatada = dataFormatada.parse(data);    
        }catch(ParseException e) {    
            e.printStackTrace();  //imprimi a stack trace  
        }    
        System.out.println(recebeDataFormatada);   
        
        new Thread(){
        	public void run(){ while(true){} }
        }.start();
    }
Pois o escopo do MAIN se encerra, então a variável recebeDataFormatada é elegível para o GC. Como o programa ainda não se encerrou, a máquina virtual pode executar o GC.

Está certa essa afirmação que fiz ?

evertonsilvagomesjav

Acredito que mesmo após á execução do main o GC irá limpar os objetos sem referencia no heap.

Criado 28 de agosto de 2010
Ultima resposta 30 de ago. de 2010
Respostas 7
Participantes 5