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