RFR 9: 8138696 : java.lang.ref.Cleaner - an easy to use alternative to finalization

mark.reinhold at oracle.com mark.reinhold at oracle.com
Mon Nov 23 22:32:05 UTC 2015

( Finally getting back to this, after too many weeks of travel ... )

2015/10/20 11:28 -0700, roger.riggs at oracle.com:
> Sorry for the silence, JavaOne preparations and the availability of
> folks who wanted to review have stretched things out.
> The Cleaner API was very simple and saw feature creep as the ideas for
> how it might be used were explored.  There are concerns about
> committing to supporting subclassable CleanableReferences in all
> future JDK versions before there had been a chance to see how if they
> would be useful and necessary to address the need to reduce the use of
> finalization within the OpenJDK and beyond.
> ...
> Updated Javadoc:
>    http://cr.openjdk.java.net/~rriggs/cleaner-doc/
> Updated Webrev:
>     http://cr.openjdk.java.net/~rriggs/webrev-cleaner-8138696/

I'm very happy to see this API return to something like its original
simple form, but I think it can be simplified even further.

We have a very strong need for phantom-ref-based cleaners, so as to
discourage people from relying upon flaky finalization. The arguments in
support of the weak and soft forms have, by contrast, been rather weak
(and soft?).  I don't think it's right to bake methods into a core API
based on just a couple of hypothetical use cases.  I'd much rather see
the Cleaner::{phantom,soft,weak}Cleanable methods reduced to a single
register method,

    Cleaner.Cleanable register(Object, Runnable);

which would create the phantom form only.  If strong justification for
the other forms arise then we can generalize this later, either to
distinct register{Soft,Weak} methods or, perhaps, to a method that takes
a type token.

- Mark

More information about the core-libs-dev mailing list