java.lang.OutOfMemoryError: límite superior del GC excedido

Recibo este error en un programa que crea varios (cientos de miles) objetos HashMap con unas pocas (15-20) entradas de texto cada uno. Todas estas cadenas deben recopilarse (sin dividirse en cantidades más pequeñas) antes de enviarse a una base de datos.

Según Sun, el error ocurre "si se pasa demasiado tiempo en la recolección de basura: si se gasta más del 98% del tiempo total en la recolección de basura y se recupera menos del 2% del montón, se lanzará un OutOfMemoryError . ".

parentemente, uno podría usar la línea de comando para pasar argumentos a la JVM para

Aumento del tamaño del almacenamiento dinámico, a través de "-Xmx1024m" (o más), o Desactivar la comprobación de errores por completo, a través de "-XX: -UseGCOverheadLimit".

El primer enfoque funciona bien, el segundo termina en otro java.lang.OutOfMemoryError, esta vez sobre el montón.

Entonces, pregunta: ¿hay alguna alternativa programática a esto, para el caso de uso particular (es decir, varios objetos pequeños de HashMap)? Si uso el método clear () de HashMap, por ejemplo, el problema desaparece, pero también lo hacen los datos almacenados en el HashMap. : -)

l tema también se discute en un tema relacionado en StackOverflow.

Respuestas a la pregunta(16)

Su respuesta a la pregunta