对于Java 5-7:
世界上标准的Oracle / Sun VM外观是:类永远存在。因此,一旦加载,即使没有人关心它们,它们仍保留在内存中。这通常没有问题,因为你没有那么多纯粹的“设置”类(=一次用于设置,然后再也不会使用)。因此,即使占用1MB的内存,谁在乎。
但是最近,我们有了类似Groovy的语言,它们在运行时定义了类。每次运行脚本时,都会创建一个(或多个)新类,并将它们永久保留在PermGen中。如果你正在运行服务器,则意味着内存泄漏。
如果启用CMSClassUnloadingEnabled,GC也会扫描PermGen,并删除不再使用的类。



