Hai fondamentalmente due situazioni possibili:
1) l'aumento di memoria e' legato SOLTANTO al fatto che Java ha memoria disponibile, e quindi non ha la necessita' di chiamare il Garbage Collector. Soluzione: forza la chiamata del GC ogni tot minuti (ad esempio mediante un thread o un timer)
2) hai dei MEMORY LEAK, cio'e la tua applicazione, o le librerie che usi, allocano delle strutture dati che poi non rilasciano. Il fatto che non le rilascino puo' essere docuto a due fattori:
2.1) la libreria ha dei bug: se lo scopri, corregilo, oppure cambia libreria
2.2) non usi la libreria nel modo corretto, nel senso che una volta usata, devi anche dire che hai finito di usarla. Noaturalmente non c'e' una regola generale, ma dipende da libreria a libreria. Devi studiare la documentazione
Se e' la tua applicazione a non rilasciare le risorse, allora sono c..i amari: devi scoprire dove questo avviene.
In generale, a meno di applicazioni particolarmente semplici, e' un lavoraccio decisamente complicato.
A supporto, comunque, ci sono i Memory Profiler, come JProfiler, YourKit, e altri li trovi qui:
https://blog.idrsolutions.com/2014/06/java-performance-tuning-tools/