Вы говорите о загруженных классах или загруженных экземплярах .
Почти 100 000 классов - это много. Весь RT из JRE 1.6 имеет около 17 тысяч классов, включая внутренние классы. 100 000 экземпляров на самом деле не так уж много.
Кроме того, классы не выгружаются (за исключением платформ, предназначенных для этого, таких как модули OSGi). Однако экземпляры, когда это необходимо, собирают мусор.
Если у вас нет исключений OutOfMemory (у вас достаточно места), сборщик мусора не должен быть таким агрессивным. Запустите Tomcat с меньшим объемом памяти, и вы увидите, что сборщик мусора начнет собирать более агрессивно. Я не рекомендую делать это на производстве, поскольку вы уменьшите производительность , оказывая давление на ГХ.
Кроме того, такой инструмент, как YourKit , может многое рассказать вам об объектах в памяти, в том числе я считаю, сколько из них имеют право на gc. Что не означает, что gc должен их собрать, но это возможно.