[armedbear-devel] Ugh! java.lang.OutOfMemoryError: PermGen space

Mark Evenson evenson at panix.com
Sat Sep 26 12:40:58 UTC 2009

On 9/24/09 9:21 PM, Alessio Stalla wrote:
> (dotimes (i 100000) (compile 'f (lambda () 42)))
> abcl dies with java.lang.OutOfMemoryError: PermGen space
> if I use nil instead of f it doesn't die. Also with nil is noticeably faster.
> Adding (when (= 999 (mod i 1000)) (room)) in the loop shows that gc is
> performed and memory is reclaimed, but apparently there's a leak
> somewhere.

Note that 'PermGen' space is different then running out of heap space. 
Among other things, 'PermGen' holds class metadata for every loaded 
class.  Since we are compiling 10^6 new classes here (and they really 
are different at a JVM level) what I think is happening is that we 
eventually exhaust the available space.

I've been able to reproduce your error running under the NetBeans 6.7 
profiler, but I am unable to exactly confirm this hypothesis as I don't 
think it has access to information on the PermGen space (or at least I 
haven't found out how to access it).

Creating a 'build.properties' with

java.options=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

(all on one line) should should allow garbage collection of the class 
instances, but it still crashes the OS X JDK6, so I don't I am 
necessarily on the right track here.

More investigatin'

"A screaming comes across the sky.  It has happened before, but there
is nothing to compare to it now."

More information about the armedbear-devel mailing list