|
|
Warp wrote:
> Darren New <dne### [at] sanrrcom> wrote:
>
>>Not necessarily. They're pointed to by the object that represents the
>>list as a whole. What pointer would you drop to make the list
>>garbage-collect with a reference-count GC?
>
>
> How do languages where there no concept of "new" (as in Java or C++)
> nor a Java-style GC of dynamically allocated objects do it?
They don't dynamically allocate and deallocate memory, I guess. I'm not
sure what your questions means. What I'm saying is that having circular
links between objects is not at all uncommon in languages that allow
such. It's the natural way to represent many semi-independent entities
(like screens/windows, frames/scrollbars, RPG objects/rooms, tree nodes,
etc.).
Obviously, if you don't have dynamically-allocated objects, then you
don't have to worry about circular references with reference-counting
garbage collection. If you have dynamically-allocated objects *and* no
GC, then obviously it's up to the programmer to free things without
assistance, and programmed reference counting won't fix that.
>>Plus, reference counting has very bad performance as well as being
>>non-real-time and uninterruptable.
>
>
> Very bad performance? I think that incrementing/decrementing a counter
> each time an object is copied doesn't increase too much of its slowness.
Not true. You have to also account for the object's reference count
overflowing, for example. Plus, you actually have to *free* the objects
when the counter goes to zero. Generational GC doesn't have to do
anything with objects that have been freed (which admittedly makes
finalizers messy, but they are messy to handle "correctly" in any
language and model). You can allocate 100,000 individual objects and
free them all with one instruction. There's a reason why nobody uses
reference-counted garbage collection for real any more.
--
Darren New / San Diego, CA, USA (PST)
Just because you find out you are
telepathic, don't let it go to your head.
Post a reply to this message
|
|