comp.lang.ada
 help / color / mirror / Atom feed
From: boehm@parc.xerox.com (Hans Boehm)
Subject: Re: Reference Counting (was Re: Searching Method for Incremental Garbage Collection)
Date: 30 Nov 1994 18:59:28 GMT
Date: 1994-11-30T18:59:28+00:00	[thread overview]
Message-ID: <3bii2g$kn2@news.parc.xerox.com> (raw)
In-Reply-To: 3bg6ci$18k@gamma.ois.com

beckwb@ois.com (R. William Beckwith) writes:

>Kevin Warne (kevinw@whistler.com) wrote:

>: Depending on the number of inc/decs, the cost of RCing can be very
>: significant.  A single inc + dec that hits on-chip cache would 
>: take 6 cycles.  Multiply by the avg. number of inc/decs taken
>: per object and the cost and percentage of cache misses and I think
>: you'll find the incrementing and decrementing operations are 
>: consequential after all.

>An incr/decr only occurs when there is a change to the graph of
>objects.  If the graph does not change, then there is not need
>to incr/decr the counts.

To reiterate Henry Baker's reply, this isn't always sufficient.
You either need to count references from local and global variables as well,
or you need to be very careful when you write your code.  My experience
is that you're usually tempted to do the latter and end up spending
lots of time debugging.  (My experience stems from a 50K-line
C program.  I'm unconvinced that either C++ or Ada facilities
would help, though they do make dumb/slow reference counting much easier.)

>Paul Wilson's RT, generational, incremental GC'tor causes work
>when the graph of objects is changed (write barrier).  Surely,
>the color changes required with a graph change can be as fast
>as a simple incr/decr operation.

You do need at least a write barrier on the heap for incremental collection.
(In the best case, the dirty bits in the MMU are a sufficient
write barrier, though not for that algorithm.  But using them is likely
to increase collector latency, though probably not above the simple RC scheme.
And your machine may not have hardware dirty bits, though the Intel
architecture does.  And your OS may already need those bits for other
things, adding a bit of overhead.)

The crucial issue in my mind is whether you can safely avoid counting
pointers from the stack.

>Maybe my perspective is skewed because I have been RC'ing in Ada 9X.
>I realize that C++ calls a copy constructor if you pass an object
>as an argument by value.  But I was under the assumption that every
>C++ RC'ing implementation worth its salt would require that the
>reference objects are passed by reference (&).

This no doubt helps, but isn't without cost.  At the implementation
level, instead of passing a pointer to a heap location and adjusting the
reference count, you're passing a pointer to a (stack allocated) indirect
location which points to the heap.  You're likely to introduce
additional memory references in accessing the result, and you may force
the actual parameter into memory, out of a register.  It also doesn't
help with local variables that are updated.

>The other trick about RC'ing is that you don't have to keep the
>counts in the objects, you can keep them all in the same data
>structure so that you pages are unnecessarily dirtied.

Yes, but that isn't free either.

Hans-J. Boehm
(boehm@parc.xerox.com)
Standard disclaimer ...



  parent reply	other threads:[~1994-11-30 18:59 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CzHCvp.9rM@rheged.dircon.co.uk>
     [not found] ` <TFB.94Nov21091959@burns.cogsci.ed.ac.uk>
     [not found]   ` <RFB.94Nov27213114@cfdevx1.lehman.com>
     [not found]     ` <3be0mh$1p7@gamma.ois.com>
     [not found]       ` <3bfprn$okr@scipio.cyberstore.ca>
1994-11-29 21:27         ` Reference Counting (was Re: Searching Method for Incremental Garbage Collection) R. William Beckwith
1994-11-30  2:27           ` Henry G. Baker
1994-11-30 18:59           ` Hans Boehm [this message]
1994-12-01  3:20             ` R. William Beckwith
1994-12-01  3:51               ` R. William Beckwith
1994-12-01 13:59               ` Henry G. Baker
1994-12-02  4:26                 ` R. William Beckwith
1994-12-02 21:37               ` Hans Boehm
1994-12-03 15:17                 ` Henry G. Baker
1994-12-09 22:07                   ` Bob Duff
1994-12-11 23:59                     ` Gary McKee
1994-12-12  5:04                       ` Henry G. Baker
1994-12-12 12:46                         ` R. William Beckwith
1994-12-16 19:35                         ` Bob Duff
1994-12-17 20:36                           ` Robert Dewar
1994-12-20  5:24                           ` Henry G. Baker
1994-12-12  9:36                     ` Robb Nebbe
1994-12-13 16:12                     ` Henry G. Baker
     [not found]           ` <DAG.94Nov30090717@bellman.control.lth.se>
1994-11-30 16:39             ` David Weller
1994-11-30 17:58               ` Erik Naggum
1994-11-30 23:14                 ` Michael Feldman
1994-12-09 14:19                 ` Ada 95 is the name Tucker Taft
1994-12-09 22:33                   ` Pat Rogers
1994-12-11 18:59                     ` Jean D. Ichbiah
1994-12-11 20:05                       ` Pat Rogers
1994-12-16  1:01                         ` Bob Duff
1994-12-12 14:50                       ` Garlington KE
1994-12-13 21:48                         ` Tucker Taft
1994-12-14 12:44                         ` Gentle
1994-12-14 17:34                         ` Jean D. Ichbiah
1994-12-10 10:10                   ` Marc Wachowitz
1994-12-11 21:37                     ` Bob Duff
1994-12-02 23:41             ` Reference Counting (was Re: Searching Method for Incremental Garbage Collection) Bob Duff
1994-12-03  8:16               ` Bill Birch
     [not found]     ` <3be0mh$1p7@ga <3bii2g$kn2@news.parc.xerox.com>
1994-12-01  4:58       ` Kevin Warne
1994-12-02 21:58         ` Hans Boehm
     [not found] <D06r8x.JBy@inmet.camb.inmet.com>
1994-12-02 17:32 ` Henry G. Baker
1994-12-05 20:59   ` Robert Firth
1994-12-06 14:15     ` Robert Dewar
1994-12-04  1:06 ` Rick Busdiecker
1994-12-04 18:57   ` R. William Beckwith
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox