Mercurial > hg > xemacs-beta
diff src/README.kkcc @ 1598:ac1be85b4a5f
[xemacs-hg @ 2003-07-31 13:32:24 by crestani]
2003-07-29 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
* README.kkcc: Aligned to the changes.
* alloc.c: Implemented the kkcc_gc_stack.
(kkcc_gc_stack_init):
(kkcc_gc_stack_free):
(kkcc_gc_stack_realloc):
(kkcc_gc_stack_full):
(kkcc_gc_stack_empty):
(kkcc_gc_stack_push):
(kkcc_gc_stack_pop):
(kkcc_gc_stack_push_lisp_object):
(mark_object_maybe_checking_free): Push objects on kkcc stack instead
of marking.
(mark_struct_contents): Push objects on kkcc stack instead of marking.
(kkcc_marking): KKCC mark algorithm using the kkcc_gc_stack.
(mark_object): Removed KKCC ifdefs.
(garbage_collect_1): Push objects on kkcc stack instead of marking.
* data.c: Added XD_FLAG_NO_KKCC to ephemeron_description and to
weak_list_description.
* data.c (finish_marking_weak_lists): Push objects on kkcc stack
instead of marking.
(continue_marking_ephemerons): Push objects on kkcc stack instead
of marking.
(finish_marking_ephemerons): Push objects on kkcc stack instead
of marking.
* elhash.c (finish_marking_weak_hash_tables): Push objects on kkcc
stack instead of marking.
* eval.c: Added XD_FLAG_NO_KKCC to subr_description.
* lisp.h: Added prototype for kkcc_gc_stack_push_lisp_object.
* profile.c (mark_profiling_info_maphash): Push keys on kkcc stack
instead of marking.
author | crestani |
---|---|
date | Thu, 31 Jul 2003 13:32:26 +0000 |
parents | e22b0213b713 |
children | 3889ef128488 |
line wrap: on
line diff
--- a/src/README.kkcc Wed Jul 30 21:52:22 2003 +0000 +++ b/src/README.kkcc Thu Jul 31 13:32:26 2003 +0000 @@ -2,6 +2,8 @@ Markus Kaltenbach <makalten@informatik.uni-tuebingen.de> Mike Sperber <mike@xemacs.org> + updated 2003-07-29 + New KKCC-GC mark algorithm: configure flag : --use-kkcc @@ -9,9 +11,9 @@ up to now: Every Lisp_Object has its own mark method, which calls mark_object with the stuff to be marked. - Also, many Lisp_Objects have pdump descriptions, which are used by - the portable dumper. The dumper gets all the information it needs - about the Lisp_Object from the descriptions. + Also, many Lisp_Objects have pdump descriptions memory_descriptions, + which are used by the portable dumper. The dumper gets all the + information it needs about the Lisp_Object from the descriptions. Also the garbage collector can use the information in the pdump descriptions, so we can get rid of the mark methods. @@ -28,41 +30,44 @@ the Object, if it is set to 0, the dumper does not care about it. + KKCC MARKING + ------------ + All Lisp_Objects have memory_descriptions now, so we could get + rid of the mark_object calls. + The KKCC algorithm manages its own stack. Instead of calling + mark_object, all the alive Lisp_Objects are pushed on the + kkcc_gc_stack. Then these elements on the stack are processed + according to their descriptions. + + TODO ---- - After all Lisp_Objects have pdump descriptions (THEY DO NOW!!), - (mark_with_description) can get rid of the mark_object calls. + - For weakness use weak datatypes instead of XD_FLAG_NO_KKCC. + XD_FLAG_NO_KKCC occurs in: + * elhash.c: htentry + * extents.c: lispobject_gap_array, extent_list, extent_info + * marker.c: marker + Not everything has to be rewritten. See Ben's comment in lrecord.h. + - Clean up special case marking (weak_hash_tables, weak_lists, + ephemerons). + - Stack optimization (have one stack during runtime instead of + malloc/free it for every garbage collect) - There are a few Lisp_Objects, where there occured differences and inexactness between the mark-method and the pdump description. All these Lisp_Objects get dumped (except image instances), so their descriptions have been written, before we started our work: - - * alloc.c: lcrecord_list - description: - mark: performs extra gc_checking_assert() for various checks. - - * alloc.c: cons - description: car and cdr - mark: cdr is marked, only if its != Qnil - * alloc.c: string - description: ??? - mark: ??? - - * buffer.c: buffer - description: XD_LISP_OBJECT indirect_children - mark: indirect_children not marked if Qnull_pointer - - * eval.c: subr - description: XD_DOC_STRING doc - mark: empty, nothing is marked - - * file-coding.c: coding_system - description: ??? - mark: ??? + description: size_, data_, and plist is described + mark: only plist is marked, but flush_cached_extent_info is called. + flush_cached_extent_info -> + free_soe -> + free_extent_list -> + free_gap_array -> + gap_array_delete_all_markers -> + Add gap_array to the gap_array_marker_freelist * glyphs.c: image_instance - description: + description: device is not set to nil mark: mark method sets device to nil if dead + See comment above the description.