Я решил эту проблему с помощью внутреннего инструмента профилирования.Извините, что не могу поделиться этим инструментом с общественностью.Комментарии к этому вопросу очень полезны.
Я суммировал комментарии ниже:
1) Возьмите дамп кучи и проанализируйте его с помощью MAT
2) Используйте профилировщик распределенияНапример, Mission Control или async-profiler
3) Используйте VisualVM
для анализа дампа кучи или используйте Mission Control для записи распределений.Примечание: если вы уменьшите размер TLAB, вы получите больше мелких образцов.
4) КСТАТИ Object[]
с большей вероятностью выделяются в ArrayList
.Дайте им большой средний размер. Я подозреваю, что ваши ArrayList
динамически растут (и имеют большой размер ~ 7,5 Кбайт). Это приводит к тому, что они помещаются в постоянное пространство, что затрудняет их очистку.
Фактически оказывается, что утечкавызвано локальным потоком ArrayDeque
s, каждый из которых продолжает увеличивать свой размер без надлежащей очистки.
Как указывает @PeterLawrey, большое значение Object[]
может указывать на рост ArrayList
или ArrayDeque
или что-то в этом роде.Этот совет очень полезен.Еще раз спасибо!