ИМО Том Хоутин - лучший ответ. Он растет, пока не достигнет максимума, затем запускает GC. В серверной среде это имеет смысл: вам нужна лучшая производительность, а не лучшее использование памяти. Вы предварительно рассчитываете общий объем памяти, затем даете каждому приложению максимум, а затем все подходит и имеет наилучшую производительность. Это поведение может быть изменено.
Используйте jconsole, чтобы посмотреть, сколько на самом деле используется. Сделайте GC и посмотрите, к чему это приведет. Это число не должно расти со временем, иначе у вас утечка памяти. Используйте visualvm для отладки утечки памяти.
Каждый раз, когда вы перезагружаете приложение, оно использует дополнительную память Perm Gen, которая не может быть восстановлена (в Sun JVM другие, такие как JRockit, не имеют этой проблемы). В производстве вы не должны перезагружать приложение. Перезагрузите Tomcat каждый раз. Если вы действительно хотите продолжать это делать, вы можете увеличить максимальную память, а также увеличить память Max Perm Gen с флагом -XX: MaxPermSize = 256m