Subject: Re: bug#53809: 29.0.50; fatal error: assertion failed: string_immovable_p (bytestr)

From: Eli Zaretskii <[email-masked]>
Date: Mon, 07 Feb 2022 21:45:45 +0200

> From: Mattias Engdegård <[email-masked]>
> Date: Mon, 7 Feb 2022 20:09:01 +0100
> Cc: [email-masked], [email-masked]
> 
> 7 feb. 2022 kl. 19.52 skrev Eli Zaretskii <[email-masked]>:
> 
> > Does this mean that Emacs will now be even less willing to return
> > memory to the OS, because the bytecode strings cannot be moved by GC?
> 
> Not to any significant degree

How do you know?  Was this measured?

> but it is of course a legitimate concern. Bytecode strings are rarely freed at all; they are typically loaded once and remain until Emacs terminates. Dynamic bytecode generation and replacement is comparatively rare.

I'm not talking about GC that frees unused string, I'm talking about
GC that moves string data to compact strings that aren't freed.

> Strings are allocated in either of two heaps: one for short strings (≤1024 bytes) and another for large ones. Only the short string heap is compacted, so all the pinning mechanism does is to use the large-string heap for all bytecode strings.

Which is exactly my bother.