[Top][All Lists]

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

New GC concept

From: Daniel Colascione
Subject: New GC concept
Date: Thu, 3 Jun 2021 20:30:26 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

Emacs has had the same GC for a decent amount of time now (since the 1980s, really). I spent some time in 2020 rewriting it from scratch. I haven't had time to work on the new GC recently, but I figure I'd throw it out here to get some feedback on the general concept.

Check out https://github.com/dcolascione/emacs-1/blob/newgc-wip/src/alloc.c, specifically the big doc comment on top

The new GC basically replaces alloc.c and a few other things. It has a few cool features:

* fully copying and compacting

* special treatment of sxhash to preserve object identify even while we move it around in memory

* generational

* contiguous storage of mark bits separately from the data heap

* concurrent (in design, not current implementation): idea is that we do concurrent marking and barely pause for sweep

* small string optimization

* bump pointer allocation of new objects

* heap enumeration support

* hard requirement on pdumper

* specialized GC spaces for conses, strings, arrays, and so on: no stupid header word for cons cells bloating memory use by 50%!

* cool modern C implementation that relies heavily on compiler inlining and constant propagation

The current implementation is deficient in many ways. Honestly, I'm not even sure whether that specific revision compiles. But like I said, I haven't had time recently to continue work on it.

Still, I'm still curious about what people think of the overall effort. It might work nicely with the new native compilation stuff, giving us a managed code execution environment kind-of, sort-of on par with the big modern managed-code runtimes.

reply via email to

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