Garbage Collection - Este código é elegível para o GC?
7 respostas
A
andredecotia
A referência recebeDataFormatada é elegível para o GC? O que fazer se sim?
publicstaticvoidmain(String[]args){Stringdata="28/08/2010";//se tirar por ex: 21:19:50 dará java.text.ParseExceptionSimpleDateFormatdataFormatada=newSimpleDateFormat("dd/MM/yyyy");//HH:mm:ssDaterecebeDataFormatada=null;try{recebeDataFormatada=dataFormatada.parse(data);}catch(ParseExceptione){e.printStackTrace();//imprimi a stack trace}System.out.println(recebeDataFormatada);}
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
Brunofs
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:
publicstaticvoidmain(String[]args){Stringdata="28/08/2010";//se tirar por ex: 21:19:50 dará java.text.ParseException SimpleDateFormatdataFormatada=newSimpleDateFormat("dd/MM/yyyy");//HH:mm:ss DaterecebeDataFormatada=null;try{recebeDataFormatada=dataFormatada.parse(data);}catch(ParseExceptione){e.printStackTrace();//imprimi a stack trace }System.out.println(recebeDataFormatada);newThread(){publicvoidrun(){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.