Алгоритм CMS использует свободные списки, чтобы записывать, где доступно пространство в куче. Как вы говорите, со временем старый ген. куча становится фрагментированной. Когда это достигнет точки, когда JVM сочтет это необходимым (то есть, становится все труднее находить место для объектов), она выполнит полную коллекцию компактов «останови мир». В этот момент вы можете испытать значительную паузу приложения. Длина паузы пропорциональна размеру старого поколения, а не количеству живых данных.
Вы получите исключение OOM, если сборщик не сможет восстановить достаточно места, чтобы справиться со скоростью продвижения объектов из молодого поколения.
Это также произойдет с G1, хотя, как правило, реже.