Here is another thing I've observed within GC. Depends on the structure of a Lisp world, from 70 to 80 percents of a symbols has the value of Qunbound, 50 - 60 % has function value Qunbound and 60 - 70 % has nil property list. These constraints adds some overload to marking traversal since Qnil and Qunbound will be reached very often, their mark bits will be checked again and again, etc. (Note Qnil is also reachable from a lot of other objects). This overload may be partially avoided by allocating Qunbound and Qnil from pure space. In this case, the number of times when the marking traversal reaches them will be the same, but mark_object will returns just after a fast check for pure object (which is performed anyway) without additional type and GC mark bit check for an object passed. For a typical workloads involving an intensive Lisp evaluations, marking time may be reduced with 0.5 - 2 %, or from ~100 to ~600 usecs (3 GHz P4) per GC, at the cost of having just 2 symbols in pure space. Dmitry