RFR 9: JDK-8146028 : Common Cleaner for finalization replacements in java.base

Daniel Fuchs daniel.fuchs at oracle.com
Tue Jan 5 18:45:16 UTC 2016

Hi Roger,

Some early feedback:

I see that prior to your changes, MeteredStream.close() would
be called by finalize.
This will no longer be the case after

I see that MeteredStream has a subclass (KeepAliveStream) that
overrides close() - so KeepAliveStream probably requires a cleanup
as well - doesn't it?

Finally I'd suggest making the variable 'pi' final - since you're
passing that to the lambda you don't want to allow its value to
be modified afterwards (fortunately it's not - and I believe it
should be good to ensure it won't be).

I haven't looked at the other classes yet...

best regards,

-- daniel

On 05/01/16 19:24, Roger Riggs wrote:
> The follow on work to adding the Cleaner is to replace uses of
> finalization with uses of the Cleaner.
> For the 'easy' cases in the java.base module, it is useful to introduce
> a private Cleaner for the
> java.base module.  It is proposed to be held weakly, to allow it to
> terminate on a lightly loaded
> system.
> Webrev for Review:
> http://cr.openjdk.java.net/~rriggs/webrev-cleaning-factory-8146028/
> The 2nd step is using the Cleaner.
>   - Empty finalize methods should (I think) be removed; but since they
> are part of the public spec
>     the process needs two full releases; so the proposal is to deprecate
> them first.
>     (The JEP 277 necessary changes will be updated when JEP 277
> semantics are finalized)
> - In a few cases, the code in the finalizer is redundant and if removed
> would allow
>    an optimization of the handling of the finalizer and future removal
> of the finalize method.
> Webrev:
> http://cr.openjdk.java.net/~rriggs/webrev-cleaning-finalizers/index.html
> Thanks for comments and suggestions,  Roger

More information about the core-libs-dev mailing list