Fala galera,
Colocar um System.gc() no done() do SwingWorker causaria algum problema ao meu programa?
public class Teste extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
//Código
return null;
}
@Override
protected void done() {
super.done(); //To change body of generated methods, choose Tools | Templates.
System.gc();
}
}
Porquê você acha que causaria algum tipo problema?
Esse método faz somente a chamada do GC!
Primeiro você tem que se perguntar porque precisa chamar o GC diretamente. Pois na grande maioria das vezes não precisa, é melhor deixar a JVM gerenciar isso para você (a ideia de ter um GC é justamente você não precisar se preocupar com ele).
Além disso, a própria documentação diz o seguinte (ênfase minha):
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects
There is no guarantee that this effort will recycle any particular number of unused objects, reclaim any particular amount of space, or complete at any particular time
Ou seja, chamar System.gc()
não garante que o GC será executado. É no máximo uma sugestão, mas no fim é a JVM que decide quando vai de fato rodá-lo.
De qualquer forma, se você está com problemas de vazamento ou uso excessivo de memória, é melhor verificar as causas e tratá-las, em vez de tentar forçar a execução do GC.
Para mais informações, leia também aqui e aqui.