RFR 9: 8138696 : java.lang.ref.Cleaner (original) (raw)

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).

Thanks Moh

-----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 thread. 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 finalization. A subsequent task will examine uses of finalization and propose specific changes on a case by base basis. Please review and comment: Javadoc: http://cr.openjdk.java.net/~rriggs/cleaner-doc/ Webrev: http://cr.openjdk.java.net/~rriggs/webrev-cleaner-8138696/ Issue: https://bugs.openjdk.java.net/browse/JDK-8138696 Thanks, Roger



More information about the core-libs-dev mailing list