java.lang.OutOfMemoryError: o limite superior do GC excedeu

Estou recebendo esse erro em um programa que cria vários (centenas de milhares) objetos HashMap com algumas entradas de texto (15 a 20) cada. Todas essas strings devem ser coletadas (sem dividir em quantidades menores) antes de serem enviadas para um banco de dado

De acordo com a Sun, o erro ocorre "se estiver gastando muito tempo na coleta de lixo: se mais de 98% do tempo total for gasto na coleta de lixo e menos de 2% do heap for recuperado, um OutOfMemoryError será lançado . ".

Aparentemente, pode-se usar a linha de comando para passar argumentos para a JVM para

Aumentar o tamanho da pilha, via "-Xmx1024m" (ou mais) ouDesativar completamente a verificação de erro, via "-XX: -UseGCOverheadLimit".

A primeira abordagem funciona bem, a segunda termina em outro java.lang.OutOfMemoryError, desta vez sobre o hea

Então, pergunta: existe alguma alternativa programática para isso, para o caso de uso específico (ou seja, vários objetos pequenos do HashMap)? Se eu usar o método HashMap clear (), por exemplo, o problema desaparecerá, mas também os dados armazenados no HashMap! : -)

A questão também é discutida em um tópico relacionado no StackOverflo

questionAnswers(16)

yourAnswerToTheQuestion