Я получаю эту ошибку в программе, которая создает несколько (сотни тысяч) объектов HashMap с несколькими (15-20) текстовыми записями каждый. Эти строки должны быть собраны (без разбивки на меньшие суммы) перед отправкой в базу данных.
Согласно Sun, ошибка возникает "если слишком много времени тратится на сборку мусора: если на сборку мусора уходит более 98% общего времени и восстанавливается менее 2% кучи, OutOfMemoryError быть брошенным. ".
Очевидно, можно использовать командную строку для передачи аргументов в JVM для
- Увеличение размера кучи через "-Xmx1024m" (или более) или
- Полностью отключить проверку ошибок через "-XX: -UseGCOverheadLimit".
Первый подход работает нормально, второй заканчивается другим java.lang.OutOfMemoryError, на этот раз о куче.
Итак, вопрос: есть ли программная альтернатива этому для конкретного варианта использования (то есть, несколько небольших объектов HashMap)? Например, если я использую метод clear () HashMap, проблема исчезнет, но и данные, хранящиеся в HashMap! : -)
Эта проблема также обсуждается в связанной теме в StackOverflow.