I've tried your original program and it crashed very quickly on my machine because stack size is set to 8MB and thus got a stack overflow. If I remove the stacksize limit after allocating all the possible memory I could on my sparc machine (less than 3GB) I got this truss output: brk(0x6EB39360) = 0 brk(0x6EF39360) = 0 brk(0x6EF39360) = 0 brk(0x6F339360) Err#11 EAGAIN brk(0x6EF39360) = 0 brk(0x6F339360) Err#11 EAGAIN but then it got stuck for a very long time with low CPU activity for me (around 0.77%). I'm now trying again with attaching a C debugger to see where it is, but I think that it is most likely traversing the whole memory during a GC cycle.