992
+ − 1 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
+ − 2 Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
+ − 3 Mike Sperber <mike@xemacs.org>
+ − 4
1598
+ − 5 updated 2003-07-29
+ − 6
992
+ − 7 New KKCC-GC mark algorithm:
+ − 8 configure flag : --use-kkcc
+ − 9
+ − 10 For better understanding, first a few words about the mark algorithm
+ − 11 up to now:
+ − 12 Every Lisp_Object has its own mark method, which calls mark_object
+ − 13 with the stuff to be marked.
1598
+ − 14 Also, many Lisp_Objects have pdump descriptions memory_descriptions,
+ − 15 which are used by the portable dumper. The dumper gets all the
+ − 16 information it needs about the Lisp_Object from the descriptions.
992
+ − 17
+ − 18 Also the garbage collector can use the information in the pdump
+ − 19 descriptions, so we can get rid of the mark methods.
+ − 20 That is what we have been doing.
+ − 21
+ − 22
+ − 23 DUMPABLE FLAG
+ − 24 -------------
+ − 25 First we added a dumpable flag to lrecord_implementation. It shows,
+ − 26 if the object is dumpable and should be processed by the dumper.
+ − 27 The dumpable flag is the third argument of a lrecord_implementation
+ − 28 definition (DEFINE_LRECORD_IMPLEMENTATION).
+ − 29 If it is set to 1, the dumper processes the descriptions and dumps
+ − 30 the Object, if it is set to 0, the dumper does not care about it.
+ − 31
+ − 32
1598
+ − 33 KKCC MARKING
+ − 34 ------------
+ − 35 All Lisp_Objects have memory_descriptions now, so we could get
+ − 36 rid of the mark_object calls.
+ − 37 The KKCC algorithm manages its own stack. Instead of calling
+ − 38 mark_object, all the alive Lisp_Objects are pushed on the
+ − 39 kkcc_gc_stack. Then these elements on the stack are processed
+ − 40 according to their descriptions.
+ − 41
+ − 42
992
+ − 43 TODO
+ − 44 ----
1598
+ − 45 - For weakness use weak datatypes instead of XD_FLAG_NO_KKCC.
+ − 46 XD_FLAG_NO_KKCC occurs in:
+ − 47 * elhash.c: htentry
+ − 48 * extents.c: lispobject_gap_array, extent_list, extent_info
+ − 49 * marker.c: marker
+ − 50 Not everything has to be rewritten. See Ben's comment in lrecord.h.
+ − 51 - Clean up special case marking (weak_hash_tables, weak_lists,
+ − 52 ephemerons).
+ − 53 - Stack optimization (have one stack during runtime instead of
+ − 54 malloc/free it for every garbage collect)
992
+ − 55
1204
+ − 56 There are a few Lisp_Objects, where there occured differences and
+ − 57 inexactness between the mark-method and the pdump description. All
+ − 58 these Lisp_Objects get dumped (except image instances), so their
+ − 59 descriptions have been written, before we started our work:
992
+ − 60 * alloc.c: string
1598
+ − 61 description: size_, data_, and plist is described
+ − 62 mark: only plist is marked, but flush_cached_extent_info is called.
+ − 63 flush_cached_extent_info ->
+ − 64 free_soe ->
+ − 65 free_extent_list ->
+ − 66 free_gap_array ->
+ − 67 gap_array_delete_all_markers ->
+ − 68 Add gap_array to the gap_array_marker_freelist
992
+ − 69
1204
+ − 70 * glyphs.c: image_instance
1598
+ − 71 description: device is not set to nil
1204
+ − 72 mark: mark method sets device to nil if dead
1598
+ − 73 See comment above the description.