emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#28590: closed (Weak tables in 2.2.2 grow indefinit


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#28590: closed (Weak tables in 2.2.2 grow indefinitely)
Date: Tue, 07 Nov 2017 11:00:02 +0000

Your message dated Tue, 07 Nov 2017 11:58:58 +0100
with message-id <address@hidden>
and subject line Re: bug#28590: Weak tables in 2.2.2 grow indefinitely
has caused the debbugs.gnu.org bug report #28590,
regarding Weak tables in 2.2.2 grow indefinitely
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
28590: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=28590
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: Weak tables in 2.2.2 grow indefinitely Date: Mon, 25 Sep 2017 10:49:13 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)
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’.



--- End Message ---
--- Begin Message --- Subject: Re: bug#28590: Weak tables in 2.2.2 grow indefinitely Date: Tue, 07 Nov 2017 11:58:58 +0100 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux)
address@hidden (Ludovic Courtès) skribis:

> Consider this program:
>
> (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))))
>
> 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.

This is fixed with Andy’s rewrite of weak tables to bucket-and-chains as
in 2.0:

  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=a053c0510c4a644f9453166b7b385cf30f6d3a21
  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=d01addeb1feba830ddd703e27f89576864a063ff
  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.2&id=dc8dda77e0c937abae42a76ea88c6e7995adbd9a
  https://lists.gnu.org/archive/html/guile-devel/2017-10/msg00051.html

\o/

Ludo’.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]