Я полагаю, что вы видите здесь, что параллельный сборщик мусора выполняет очистку молодого поколения, но куча постоянно перемешивается, поэтому он не может получить все ссылки на коллекцию старого поколения. Когда вы нажимаете кнопку «Выполнить сборщик мусора», вы создаете коллекцию «останови мир», которая блокирует все потоки, замораживает кучу и позволяет создать намного большую коллекцию. Моя главная проблема здесь - возникает ли когда-либо большая коллекция (через x часов)? Вы видите ошибки OutOfMemory с меньшей кучей?
1) У вас включена кнопка автообновления? Также может быть, что профилировщик делает небольшой GC (пространство Eden) перед тем, как сделать снимок.
2) Это совершенно нормально. Сборка мусора требует времени и ресурсов (процессорные циклы). Если вы установили кучу большого размера, она будет ждать, пока не достигнет некоторого процента от нее, до запуска самой сборки мусора. Я думаю, что соотношение свободного пространства и живого объекта по умолчанию составляет от 40% до 70%. Я знаю, что tomcat определенно изменил способ сборки мусора в версии 5, у tomcat v4 были проблемы с производительностью, потому что он потратил много времени на работу сборщика мусора. Возможно, вы захотите провести здесь какое-то исследование и посмотреть, есть ли у tomcat собственные параметры сборки мусора.
3) Нет. Почти полная куча - это то, к чему вы стремитесь. Возможно, имеет смысл уменьшить размер кучи, чтобы полная сборка мусора не заняла так много времени. Это компромисс между множеством сборщиков мусора (паузы) и длительными сборками мусора (длинные паузы). Каждое приложение отличается, поэтому я обычно начинаю с настроек по умолчанию и настраиваю их по мере необходимости. Есть много вариантов для сборки мусора (и альтернативных сборщиков), если вам интересно.
Java 5
Java 6 FAQ , Технический документ