В одном из наших приложений Java мы получили OutOfMemoryError:GC Overhead limit exceeded.
OutOfMemoryError: GC Верхний предел превышен
Мы использовали HashMaps в someplaces для хранения некоторых журналов data.From мы можем определить, что я его воспроизводящий на том же месте.
Я хотел спросить, тратит ли сборщик мусора больше времени на очистку хэшмапов?
После глядя на код (я не могу поделиться здесь), я обнаружил, что, что есть HashMap создается как
Hashmap topo = new HashMap();
но HashMap никогда не используется. Является ли это своего рода утечкой памяти в моем приложении?
Если этот Hashmap
создан внутри метода, который выполняет некоторую обработку и не используется в другом месте, этот метод также доступен для моих нескольких потоков. Например, в таком случае это повлияет, создавая Hashmap, как указано выше, сборщик мусора потратить больше времени на восстановление кучи и выбросить OOME.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Если ссылка 'topo' не выходит за пределы области, в которой она была объявлена, то нет, это не способствует созданию утечки памяти. –
Будет ли сборщик мусора сталкиваться с проблемами при очистке этих хэш-карт? Если предположить, что существует большое количество этих хэш-карт – Saurav
Используйте профилировщик, чтобы посмотреть на потребление памяти или увеличить максимальный объем памяти. Если вы не измеряете свою программу, вы просто угадываете. Использование большого количества HashMaps не подходит для производительности/памяти, но это может быть не самая большая проблема. –