Винятки java.lang.OutOfMemoryError: PermGen space найчастіше помітні ще при запуску проекту, але також проблеми можуть виникнути "несподівано", на вже запущеному проекті, особливо якщо ви використовуєте на своєму сервері додатків функцію hot-deployment.
PermGem - Permanent Generation в основному використовується для завантаження виконуваних класів ClassLoader. Максимальний обсяг PermGen пам'яті фіксується при запуску VM і не може бути змінений на льоту. Початкове значення в HotSpot VM 64mb, але воно по-різному залежно від платформ і версій VM.
Hot-deployment реалізується через перезавантаження класів ClassLoader'ом (для кожної програми він свій). Після завантаження нової версії класу через якийсь час буде викликаний Garbage Collector і звільнить пам'ять під старою версією, однак тут можуть виникнути труднощі, які допоможуть запобігти звільнення пам'яті. В кінцевому підсумку вони приведуть до java.lang.OutOfMemoryError: PermGen space exception.
Найпростіше рішення збільшення обсягу PermGen пам'яті при запуску VM, додаємо для цього ключ
-XX: MaxPermSize = 512m
Якщо ви використовуєте Maven, то створюємо, або додаємо в уже створену, змінну оточення MAVEN_OPTS:
-XX: MaxPermSize = 512m