[HN Gopher] Garbage Collection in a Large Lisp System (1984) [pdf] ___________________________________________________________________ Garbage Collection in a Large Lisp System (1984) [pdf] Author : mepian Score : 36 points Date : 2023-08-21 14:21 UTC (8 hours ago) (HTM) web link (dl.acm.org) (TXT) w3m dump (dl.acm.org) | tekknolagi wrote: | This is a good paper. It's the one I read some years ago that | made semispace garbage collection click for me. | smokel wrote: | I once read that in the olden days, one would work away on a | machine for some time, and when evening came, you'd start the | garbage collection process to write all relevant data to tape, | from which you'd start again the next morning. | jjtheblunt wrote: | i'm not sure if this is related, but i think Lisp systems | traditionally let you save the core image to restart in the | same state. | vindarel wrote: | related: the Immix inspired parallel-mark-region GC developed by | Hayley Patton got merged recently into SBCL (https://github.com/s | bcl/sbcl/commit/40276b25370f2af1e1870d3b...). | | https://github.com/sbcl/sbcl/blob/master/doc/internals-notes... | | https://applied-langua.ge/~hayley/swcl-gc.pdf | | build with ./make.sh --without-gencgc --with- | mark-region-gc (on x86-64/Linux and x86-64/macOS only at the | moment). | the-smug-one wrote: | >Kandria, a commercial game written in Common Lisp [14 ], is | used in a more complex benchmark. The game uses a mixture of | object-oriented code and numerical code with unboxed arrays. | The game is configured identically to the retail version, using | a 4GB heap. We played the same part of the game for a few | minutes with each collector configuration10, and record the | distribution of how long it takes to produce each frame (frame | times), and the distribution of pause times in the kandria | benchmark. | | That's a fun benchmark to have. Seems like gencgc is better | than the new GC anyway wrt pause times? | | >Very few objects survive garbage collection in Kandria, with | less than a megabyte surviving out of a 200 megabyte nursery. | | From this sentence I'm going to guess that Kandria performs a | lot of per-frame allocations. Having a bump-pointer arena for | this which is reset per-frame would probably be quite nice. | | The Acknowledgements section is crazy haha, with mentions such | as Cliff Click (OG Hotspot JIT compiler architect) and Larry | Masinter (Xerox PARC Interlisp) along with the nice SBCL and | Kandria devs. | gumby wrote: | Is anyone still using transporting (copying) collectors these | days? Without forwarding pointers you can only do it via stop and | copy. | | I'm not sure I'd want to implement forwarding pointers without | hardware support for transparency. | chubot wrote: | ??? Just about all high performance GCs use moving GCs for the | young/fast generation, to get bump allocation | | Examples: | | The whole v8 lineage of VMs, and SpiderMonkey followed shortly | thereafter | | Java Hotspot and most fast alternatives | | Femtolisp used to bootstrap Julia is a moving GC with no | generations | | Forwarding is not really a problem, the algorithm is well known | | Rooting is a difficult problem in many contexts -- both C and | webassembly. | | You need precise rooting to implement moving GC, that's the | main implementation issue | | (On my phone, sorry no links) | monocasa wrote: | Yeah, because you need a copying collector to be generational | and to compact. You do have to stop, but you don't have to stop | normal execution threads for very long (under a millisecond for | ZGC, and the time doesn't scale with heap size). | aardvark179 wrote: | A lot of engineering has gone into GCs over the years to avoid | the need to stop the world when copying objects around, and no | hardware support is needed for the pointer chasing. You do need | support for atomic swaps and sometimes some MMU tricks but | other than that you're good. | kryptiskt wrote: | It's quite common with generational GCs, The nursery is small | and many objects die early, so not a lot has to copied in minor | collections. I've never seen one without forwarding pointers, | it seems to me that they are necessary for updating all | references. ___________________________________________________________________ (page generated 2023-08-21 23:00 UTC)