Попробуйте увидеть кучу памяти в jprofiler или jvisualvm.Одним из вариантов может быть то, что куча будет занимать всю предоставленную вами память, но использовать только ее часть.В общем случае это зависит от алгоритма сборщика мусора.Я бы порекомендовал вам выполнить следующие шаги:
1) Проверьте, действительно ли используется память, занятая кучей (вы можете увидеть это в jprofiler или jvisualvm).Если приложение забирает всю память, но не использует ее, вы можете ограничить ее некоторым разумным значением, используя аргумент Xmx jvm.
2) См. Использование памяти под нагрузкой и в режиме ожидания.Увидеть разницу.В зависимости от выполняемых вами операций, некоторые объекты могут находиться в памяти, но они должны собираться время от времени.
3) Если это действительно утечка, и вы видите, что память, зарезервированная jvm, действительно используется иникогда не освобождать - возьмите дамп памяти и посмотрите, какие объекты там находятся (попробуйте jprofiler или jvisualvm).Это даст вам подсказку, где искать.