Логи GC вам не особо помогут, как мне кажется.
Сделайте дамп памяти через VisualVM. Вкладка Monitor - кнопка Heap Dump.
Получится мгновенный снимок кучи (Heapdump).
В VisualVM этот же снимок можно посмотреть. Перейдите в раздел Objects, в нем будет список объектов, отсортированных по размеру в памяти. Ищите объекты, которые относятся к вашему приложению. Как правило, смысла смотреть встроенные объекты Java, например byte[] или java.lang.String - нет.
Далее смотрите что это за объект и его связи (references). Так можно узнать потребителя и объект, который не дает GC удалить его из памяти.
VisualVM бесплатный, есть еще JProfiler - он уже стоит денег. Делают они в целом одно и тоже, но в JProfiler больше возможностей.