Конечно, существует вероятность утечки памяти, то есть ваша программа продолжает выделять память, даже не освобождая ее.(Например, в постоянно растущем списке или на карте.) Вам потребуется профилировщик памяти, чтобы убедиться, что вы не страдаете от такой ситуации.
Кроме этого, я не буду беспокоиться, есливиртуальная машина продолжает выделять память, не освобождая ее.Так работают современные виртуальные машины, особенно в «клиентском» режиме: до тех пор, пока имеется много свободной памяти, они не будут тратить время на сборку мусора.Если предел памяти приближается, то тогда включается сборщик мусора.(Режим «клиент» и «сервер» - это аргумент JVM, с ним можно поэкспериментировать, если хотите, подробнее здесь: Реальные различия между "java -server" и "java -client"? )
Кроме этого, вы можете сделать следующее:
a) убедиться, что ваш механизм выполнения полного GC фактически выполняет полный GC.Лучший известный мне механизм (который не гарантированно сработает, но, насколько я могу судить, работает) - это выделить объект, на который ссылаются только через мягкую ссылку, и затем продолжать вызывать GC, пока мягкая ссылка не станет нулевой..
b) при выполнении отладки (скажем, если утверждения включены) продолжайте запуск полного GC в отдельном потоке каждые несколько секунд.Затем, если вы посмотрите на память, потребляемую виртуальной машиной, она должна оставаться примерно постоянной.Если нет, то у вас утечка памяти.