Quando Coletar Garbage
Eu tenho um pedaço de código que carrega uma imagem muito grande na memória. Então parecia uma coisa razoável chamar
System.gc();
antes de carregar a imagem. Pelo que posso dizer, funciona sem problemas.
Ontem eu decidi usar um software muito útil chamadoFindBugs que analisa seu código e relata problemas que podem causar bugs ou estratégias geralmente não recomendadas. O problema é que esse pedaço de código que mencionei é relatado. A descrição é esta:
... força a coleta de lixo; extremamente duvidosa, exceto no código de benchmarking
E continua a elaborar:
Código invoca explicitamente a coleta de lixo. Exceto para uso específico em benchmarking, isso é muito duvidoso.
No passado, situações em que as pessoas invocavam explicitamente o coletor de lixo em rotinas como fechar ou finalizar métodos levaram a buracos negros de alto desempenho. A coleta de lixo pode ser cara. Qualquer situação que force centenas ou milhares de coletas de lixo trará a máquina para um rastreamento.
Então minha pergunta é:Não é OK para chamar programaticamente o coletor de lixo nesse caso? Meu código só o chama uma vez e o método em que ele é usado raramente é usado. E se não estiver certo chamá-lo então o que você deve fazer em um caso em que você precisa da maior quantidade de memória possível antes de fazer uma operação muito intensiva de memória e precisa liberar o máximo possível de memória antes dela?