[gclist] Time-stamping objects...

Charles Fiterman cef@geode.geodesic.com
Mon, 15 Apr 1996 13:41:01 -0500


> |   Generational collectors eliminate fragmentation and if you have enough
> |   storage are more efficient. In fact as the amount of storage increases
> |   copying collectors approach zero overhead. If you never reach the end
> |   of the space copying collectors have zero overhead. With this in mind
> |   it makes sense to build execution frames on the heap.
> 
> You have to be very careful about this last claim because it is
> generally not true.
> 
> The add/subtract instruction that deallocates a stack frame
> simultaneously produces the pointer to the previous one.
> 
> If you allocate execution frames on the heap you will typically have
> to load through a pointer to obtain the pointer to the previous one.
> In addition, depending on your allocator you may need to write extra
> header words (e.g. length of frame).
> 
> Thus even if you never trigger a collection, you will typically have
> higher overhead for the heap-allocated execution frames than for the
> stack-allocated frames.
> 
> A different issue is how expensive is call-with-current-continuation
> and which way the trade-off should go there.

I'm experimenting with a system where execution frames are full
blown objects that can take a variety of messages. Once this level
of sophistication is reached a lot of execution frames become
complex and you have fewer execution frames. Partial evaluation
makes a lot of messages non frame building. You can evaluate down
to inline code or even a result.