У меня ошибка "OutOfMemoryError: PermGen space" на моем сервере CF 8.
В моем приложении 1000 шаблонов были загружены в одну и ту же локальную переменную (для целей тестирования), поэтому после загрузки следующей должна быть доступна предыдущая для GC, но этого не происходит.
Я получил дамп памяти и посмотрел на него с помощью jhat. Я увидел, что он загружает тысячи шаблонов, каждый со своими экземплярами TemplateClassLoader. В самом TemplateClassLoader есть статическая ссылка на все экземпляры TemplateClassLoader (опять же, из jhat). Вероятно, из-за этого экземпляры хранятся в памяти, поэтому объекты класса не могут быть GC в permgen.
Это «удержание памяти» происходит, только если я вызываю функцию cfscript в шаблоне после загрузки. Если я просто загружаю шаблон, но не вызываю функцию, объекты класса GCed, и ошибка OOM не возникает.
Есть идеи, что происходит с (появившейся) статической ссылкой на TemplateClassLoader?