Please note that calling FactoryFinder.releaseFactories() does not release ClassLoaders due to this issue: http://issues.apache.org/jira/browse/MYFACES-1558
There are two static hash maps that hold ClassLoaders instances: _factories and _registeredFactoryNames.
releaseFactories() removes ClassLoaders entries only from _factories and leaves them intact in _registeredFactoryNames, which is enough to prevent them from being GC'ed.
At the time of this comment being written, this bug was not resolved, but I patched FactoryFinder locally with the line of code marked red:
public static void releaseFactories()
ClassLoader classLoader = getClassLoader();
... and observed that the memory leak disappeared.