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

Roger Riggs Roger.Riggs at Oracle.com
Thu Oct 1 14:12:49 UTC 2015


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