If you take a look at the dump here: https://dl.dropboxusercontent.com/u/20288797/temp/memory-dump.tar.bz2
And that you look at the classes, you will see several copies of the class
org.codenarc.rule.Violationor
org.codehaus.groovy.antlr.parser.GroovyLexer`. The multiple copies come from different classloaders, which is fine.
What is not is that those classes are not retained anymore, nor is their classloader (they are all softly or weakly reachable),
but they are not garbage collected, leading to the leak.
To reproduce the PermGen leak, first make sure you use JDK 7 or JDK 6, but the two should be tested independently because Groovy doesn't use the same way to store global class information (ClassValue since JDK 7).