Классы привязаны к загрузчику ClassLoader, который их загрузил. Чтобы JVM собирала неиспользуемые классы, вы должны очистить все ссылки на загрузчик классов. Вот как серверы приложений работают с «горячим развертыванием», и, возможно, поучительно посмотреть на реализации JBoss или Tomcat, если вы не знакомы с загрузчиками классов (я не смотрел ни на один из них, поэтому не могу указать на них) .
Мне интересно, однако, действительно ли это будет проблемой? Сколько классов вы планируете создать, насколько большими они будут и как долго они будут жить? Если у вас много больших классов (скажем, 50 000 байт-кода или более), и они будут жить недолго, то имеет смысл их очистить. В противном случае, не так много.
Кроме того, почему вы создаете классы? Это то, что вы можете сделать с помощью языка сценариев (например, Rhino) изнутри JVM? Или самодельный переводчик? Если да, то это решило бы ваши проблемы управления классом без кода.