【发布时间】:2011-09-29 14:27:32
【问题描述】:
我的 CF 8 服务器上出现“OutOfMemoryError: PermGen space”错误。 在我的应用程序中,1000 个模板被加载到同一个局部变量中(用于测试目的),因此一旦加载了下一个模板,前一个模板就应该可用于 GC——但这不会发生。 我得到了一个内存转储,并用 jhat 查看了它。我看到的是它加载了数千个模板,每个模板都有自己的 TemplateClassLoader 实例。在 TemplateClassLoader 中,它本身有一个对所有 TemplateClassLoader 实例的静态引用(同样来自 jhat)。可能正因为如此,实例是在内存中保存的,所以类对象在permgen中不能被GC。
只有当我在模板中调用一个 cfscript 函数加载一次时,才会发生这种“占用内存”。如果我只是加载模板而不调用函数,则类对象被GC,不会发生OOM错误。
知道 TemplateClassLoader 上(出现的)静态引用发生了什么吗?
【问题讨论】:
标签: coldfusion permgen