Consider this program: --8<---------------cut here---------------start------------->8--- (use-modules (ice-9 format))
(define loops 3000000) (define table (make-weak-key-hash-table)) (let loop ((i loops)) (unless #f ;(zero? i) (when (zero? (modulo i 100000)) (format #t "heap-size: ~,2h MiB table: ~s~%" (/ (assoc-ref (gc-stats) 'heap-size) (expt 2. 20)) table)) (hashq-set! table (cons 1 2) #t) (loop (1- i)))) --8<---------------cut here---------------end--------------->8--- On 2.0.14, the heap size stays at around 24 MiB, and the table size is stable at 224,717 buckets (?). On 2.2.2, the heap grows indefinitely (though logarithmically). It’s not deterministic though: sometimes the heap size stabilizes in the 140–300 MiB range, and sometimes it keeps growing endlessly even though the table size reaches a maxium at 7,190,537 entries. Ludo’.