• Как избежать долгих пауз GC при создании множества мелких объектов?

    @jDekx Автор вопроса
    Все починилось. Допущенная ошибка в коде, в процессе рефакторинга, которую не покрывали тесты. Основной поток стал обрабатывать слишком много узлов, игнорируя проверку на максимально-допустимое количетсво. Это привело к сильному росту потребления памяти, при этом другие потоки успешно выполняли свою работу и GC подчищал память за ними. Это меня запутало, т.к. судя по графику память иногда, да очищалась.

    Просмотрел количество объектов Node и очередей, в которых они хранятся, выяснилось, что на одну очередь приходится порядка 10'000'000 Node, это значение сильно больше максимально-допустимого. После исправления ошибки, основной поток стал корректно выполнять свою задачу, рост памяти и вызов GC перестали быть проблемой.

    График памяти после решения проблемы:
    5d2737b3ee32f630572455.png
    Ответ написан
    Комментировать