(define n 2000) (handle-exceptions exn (begin (print "Caught an exception" exn)) (let loop [(i 0)] (let [(o (make-vector 100000))] (if (not (= i 1000)) (set-finalizer! o (lambda (ob) (print "gc'ing " i))) (set-finalizer! o (lambda (ob) (+ i 'a)))) (if (< i n) (loop (+ 1 i)))))) (print "making more objects") (let loop [(i 0)] (let [(o (make-vector 100000))] (print i) (set-finalizer! o (lambda (ob) (print "gc'ing 2 " i))) (if (< i n) (loop (+ 1 i))))) (print "done") ;; Result when compiled: ;; [panic] out of memory - cannot allocate heap segment - execution terminated ;; OR ;; 100% cpu with no apparent progress