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

Rezaei, Mohammad A. Mohammad.Rezaei at gs.com
Thu Oct 1 14:28:56 UTC 2015

The proposed API makes good sense for what I would consider coarse grained cleanup. 

There is another significant use case for Weak/Soft references that is not covered here: weak/soft references used in cache like data structures, e.g. WeakHashMap.

Wouldn't there be significant code reuse if I could register a ReferenceQueue and get callbacks when appropriate?

(Just like other uses of this cleaner, any user of this api has to pay attention to concurrency, so WeakHashMap, as is, is not a great candidate for this).


>-----Original Message-----
>From: core-libs-dev [mailto:core-libs-dev-bounces at openjdk.java.net] On Behalf
>Of Roger Riggs
>Sent: Thursday, October 01, 2015 10:13 AM
>To: Core-Libs-Dev
>Subject: RFR 9: 8138696 : java.lang.ref.Cleaner - an easy to use alternative
>to finalization
>Please review a proposal for public Cleaner API:
>A Cleaner is proposed to provide an easy to use alternative to
>finalization. The service would provide easy registration and
>cancellation of cleanup functions for objects. Applications create a
>cleanup service for their own use and the service terminates when it is
>no longer in use.
>Finalization has a long history of issues both in usage and performance.
>PhantomReferences have been proposed as the alternative GC based
>mechanism for cleaning functions but it has been left as an exercise to
>the developer to construct the necessary mechanisms to handle
>ReferenceQueues, handle threading issues and robust termination.
>The Cleaner performs cleaning functions when objects are unreachable as
>found by garbage collection using the existing mechanisms of
>PhantomReference, WeakReference, SoftReferences, and ReferenceQueues. It
>manages a thread that dequeues references to unreachable objects and
>invokes the corresponding cleaning function. Registered cleaning
>functions can be cleared if no longer needed, can be invoked explicitly
>to perform the cleanup immediately, or be invoked when the object is not
>reachable (as detected by garbage collection) and handled by a cleanup
>The java.lang.ref package is proposed for the Cleaner because it is
>complementary to the reference classes and reference queues and to make
>it easy to find.
>It is not a goal to replace all uses of finalization or sun.misc.Cleaner
>in the JDK.
>Investigation will evaluate if and in what cases the Cleaner can replace
>A subsequent task will examine uses of finalization and propose specific
>on a case by base basis.
>Please review and comment:
>   http://cr.openjdk.java.net/~rriggs/cleaner-doc/
>    http://cr.openjdk.java.net/~rriggs/webrev-cleaner-8138696/
>    https://bugs.openjdk.java.net/browse/JDK-8138696
>Thanks, Roger

More information about the core-libs-dev mailing list