|
![](/i/fill.gif) |
Invisible wrote:
> As I understand it, Smalltalk did it by having an "object table". Each
> reference to an object is just an object ID - an index into the object
> table. The object table then stores the pointers to the actual objects.
> That means you can easily move the objects around so long as you update
> the object table. (And you can potentially store additional information
> in the object table too, for example to help the GC.) The down-side is
> an extra level of indirection.
Yes. I'm pretty sure the GC info was in the objects, tho. Having the object
table also made "become:" quite inexpensive. ( "A become: B" would swap
every reference to A to be one to B and vice versa. This was important in a
system where you could change code while things were running and you wanted
the new class declaration to replace the old one. It was also used to resize
arrays, which therefore didn't need the extra overhead of a hidden pointer
pointing to the "real" array.)
> I think before you can talk about what "Java" does, you'd have to
> specify which Java implementation you mean; presumably each JVM can
> implement this stuff any way they choose.
Yes, that's the problem. Altho they can't really add CoW simply because
nobody would take advantage of it by making a bunch of duplicate references
that they didn't expect to share state. Nor to make strings mutable.
> As far as I understand it, what GHC does is this: Each object reference
> is a machine address. When the GC moves everything, it updates all the
> references. (I think that's what Darren is trying to say that Java does.)
Yes. Or at least C#.
--
Darren New, San Diego CA, USA (PST)
Serving Suggestion:
"Don't serve this any more. It's awful."
Post a reply to this message
|
![](/i/fill.gif) |