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-boun...@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