Imagine that we have a boatload of memory and we're nowhere near the
limit. Suppose, too, that we allocate memory simply by bumping the
free pointer. If you think about it, you can see that the age of the
most recently allocated objects is simply the distance between the
object's location and the current value of the free pointer. Little's
Law tells us that mean age of a heap allocated object is equal to the
mean size of the reachable heap, so it must be the case that the mean
distance from the reachable objects to the free pointer is also equal
to the mean size of the heap (blah, blah, satisfy boundary conditions,
blah, in the limit, etc.)
A few weeks ago, someone asked about the improvement in locality that one may get from the garbage collector. The vast majority of objects don't survive even a single garbage collection, so the vast majority of objects are layed out in memory exactly where they were consed and cannot benefit from any improvement in locality. This is not to say that there is no effect at all, but that the effect doesn't apply to the vast majority of objects.
Someone also asked what the GC pauses were. With a large heap (131072 blocks), the total time for MIT/GNU Scheme compiling itself was 167.7 seconds runtime, 1.06 second GC time. This comes out to about 22 milliseconds per GC.
No comments:
Post a Comment