Há MUITO a ser dito sobre reservar um tempo para testar as várias configurações de coleta de lixo, mas, como foi mencionado acima, geralmente não é útil fazer isso.
Atualmente, estou trabalhando em um projeto que envolve um ambiente de memória limitada e uma quantidade relativamente grande de dados - existem algumas grandes partes de dados que levam meu ambiente ao seu limite, e embora eu tenha conseguido reduzir o uso de memória de forma que, em teoria, deveria funcionar bem, eu ainda obteria erros de espaço de heap --- as opções detalhadas do GC me mostraram que ele estava tentando coletar o lixo, mas sem sucesso. No depurador, eu poderia executar System.gc () e com certeza haveria "abundância" de memória disponível ... não muito extra, mas o suficiente.
Consequentemente, a única vez que meu aplicativo chama System.gc () é quando está prestes a inserir o segmento de código onde grandes buffers necessários para o processamento dos dados serão alocados e um teste na memória livre disponível indica que não estou garantido tê-lo. Em particular, estou olhando para um ambiente de 1 GB onde pelo menos 300 MB são ocupados por dados estáticos, com a maior parte dos dados não estáticos relacionados à execução, exceto quando os dados sendo processados são de pelo menos 100-200 MB em a fonte. Tudo faz parte de um processo de conversão automática de dados, portanto, todos os dados existem por períodos relativamente curtos de tempo no longo prazo.
Infelizmente, embora as informações sobre as várias opções para ajustar o coletor de lixo estejam disponíveis, parece um processo amplamente experimental e as especificações de nível inferior necessárias para entender como lidar com essas situações específicas não são facilmente obtidas.
Dito tudo isso, embora eu esteja usando System.gc (), eu ainda continuei a ajustar usando parâmetros de linha de comando e consegui melhorar o tempo de processamento geral do meu aplicativo em uma quantidade relativamente significativa, apesar de ser incapaz de superar o obstáculo representado pelo trabalho com os blocos maiores de dados. Dito isto, System.gc () é uma ferramenta .... uma ferramenta muito pouco confiável, e se você não for cuidadoso com a forma como a usa, vai desejar que não funcione com mais freqüência.