[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: RE: Garbage collection
- From: David Bhowmik <david.bhowmik@...>
- Date: Fri, 25 Oct 2002 12:11:07 +0100
No need to get religious. M&S may be appropriate for you but not for
problems like ours. We have no idle time.
> And, unlike garbage collection, where you have to worry about GC pauses
only when you
> allocate something new, reference counting may hit you with memory
> management pauses on any assignment.
m&s takes time on allocation and then a massive hit on collection of loads
at once. Reference counting spreads the collection hit. For some problems
that is a better solution. There are problems with cirular references but if
done properly that is all.
From: tom7ca [mailto:email@example.com]
Sent: 25 October 2002 10:41
To: Multiple recipients of list
Subject: Re: Garbage collection
> I've been thinking about this a little -- the regular mark-sweep
> should be able to collect cyclic stuff, right? So
> is sort of an incremental collector for non-cyclic structures. The
> great thing about reference counting is that it's simple and easy to
> understand. Has David posted his patch publically?
Reference counting is not "incremental" in any interesting
sense: there is no bound on the number of blocks freed by any single
assignment. In fact, the same is true even for completely manual
storage management: calling "free" is not a constant time operation,
so even if you move to more complicated reference counting schemes,
you still lose.
I really don't understand this infatuation with reference counting:
it's inefficient on the average, it does not guarantee bounded
latency, and it leaks storage in the presence of circular structures.
Implementing it right is a lot of work and it infects every single
piece of C code with error prone operations. And, unlike garbage
collection, where you have to worry about GC pauses only when you
allocate something new, reference counting may hit you with memory
management pauses on any assignment.
If you want soft or hard real-time response for dynamic memory
allocation, well-implemented garbage collectors are not only
convenient, they are pretty much your only choice. Anything else may
appear to work most of the time, but it doesn't guarantee anything.
It would be great for Lua to get a real-time or soft real-time or
incremental GC. Until then, paying a little attention to when you
allocate storage, using storage pools, and invoking the garbage
collector frequently when your process is idle probably will work just
as well as reference counting, if not better.