RFR 9: 8138696 : java.lang.ref.Cleaner - an easy to use alternative to finalization
Roger.Riggs at Oracle.com
Thu Oct 1 15:40:26 UTC 2015
Thanks for the comments and correction, the intention was to describe the
(I updated the webrev in place with the editorial changes).
On 10/1/2015 11:11 AM, Eamonn McManus wrote:
> I think this is a great idea. In addition to the NetBeans precedent
> cited in the Issue, I'll note that Guava has
> FinalizableReferenceQueue. Like the NetBeans solution, that has proved
> tricky to make collectable in a context where its ClassLoader might
> become otherwise unreferenced. Having the facility in the JRE obviates
> that problem.
> As a minor note, the javadoc says "phantomCleanup registers the
> Runnable to be run when object is not phantom reachable", which I
> don't think is technically accurate. The java.lang.ref definition of
> reachability is that an object becomes (for example) phantom reachable
> when it is referenced by a phantom reference but no longer has any
> stronger level of reachability. So the text here should say "when the
> object becomes phantom reachable". Likewise the per-method text "when
> the object is unreachable by a PhantomReference" should say "becomes
> phantom reachable". And of course the same, mutatis mutandis, for the
> soft and weak equivalents.
> 2015-10-01 7:12 GMT-07:00 Roger Riggs <Roger.Riggs at oracle.com>:
>> 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
>> A subsequent task will examine uses of finalization and propose specific
>> on a case by base basis.
>> Please review and comment:
>> Thanks, Roger
More information about the core-libs-dev