[gclist] Finalization and death notices
Boehm, Hans
hans_boehm@hp.com
Tue, 9 Oct 2001 12:00:06 -0700
> From: Greg Colvin [mailto:gcolvin@us.oracle.com]
>
> From: Boehm, Hans <hans_boehm@hp.com>
> > I think that some of what we're really talking about here
> is the choice
> > between three alternatives:
> >
> > 1) The collector directly runs finalizers from whichever
> thread happened to
> > allocate and invoke the collector. This is common in early Java
> > implementations, but fundamentally broken. It leads to intermittent
> > deadlocks and/or multiple threads in the same monitor.
> Let's ignore this
> > alternative. (Such a facility can sometimes be used to implement a
> > reasonable one. But if it's there it shouldn't be exposed
> to the user.)
>
> Is this approach broken if it is done immediately after the last
> pointer to an object goes away, as with reference counting?
>
Yes. See http://www.hpl.hp.com/personal/Hans_Boehm/gc/det_destr.html .
It breaks whenever the finalizer needs to acquire a lock that may be held
during a pointer assignment. (Or when it should logically hold such a
lock.) That's likely to happen whenever a finalizer updates a global
user-level data structure.
Hans