RFR 8080225: FileInputStream cleanup should be improved

mandy chung mandy.chung at oracle.com
Tue Oct 3 23:17:17 UTC 2017

Hi Roger,

This looks good overall.

53 * unreachable should explicitly override {@link #finalize} and call 
{@code close}.

Since finalize is deprecated, I would not recommend to have the subclass 
adding the finalize method.  I suggest to take that phrase out (I gave a 
similar comment to JDK-8185582 [1]).   Users should use 
try-with-resource or register the instances in a cleaner.

As for the tests, FinalizeShdCallClose.java implements finalize.  I 
think it'd be good to convert them to try-with-resource.

I'm not close to java.io implementation.  Would registerCleanup be 
called more than once? line 220 in the registerCleanup will create a new 
cleanup if it's invoked the second time - is it intentional?

216 synchronized void registerCleanup() {
217 if (cleanup != null) {
218 cleanup.clear();
219 }
220 cleanup = FDCleanup.create(this);
221 } thanks Mandy


On 9/29/17 10:17 AM, Roger Riggs wrote:
> Replacing finalizers in FileInputStream, FileOutputStream, and adding 
> cleanup to RandomAccessFile
> and NIO File Channels with Cleaner based implementations required 
> changes to FileDescriptor.
> The specification of FileInputStream and FileOutputStream is changed 
> to remove the finalizer
> behavior that required their respective close methods to be called.
> This change to the behavior is tracked with CSR 8187325 [3].
> The FileDescriptor implementations (Unix and Windows) provide a 
> cleanup function that is now used by
> FIS, FOS, RAF, and async and normal FileChannels.  Each requests 
> FileDescriptor to register a cleanup function
> when the fd or handle is assigned and delegates to 
> FileDescriptor.close.  If the respective
> FileDescriptor.close method is not called, the fd or handle will be 
> closed when the FileDescriptor
> is determined to be phantom reachable.
> The other uses of FileDescriptor are not intended to be changed, for 
> example in sockets and datagrams.
> Some tests were modified to not rely on finalization; new tests are 
> provided.
> Comments are appreciated on both the CSR [3] and the implementation [1].
> [1] webrev: 
> http://cr.openjdk.java.net/~rriggs/webrev-fis-cleanup-8080225/
> [2] Issue:   https://bugs.openjdk.java.net/browse/JDK-8080225
> [3] CSR:  8187325  FileInputStream/FileOutputStream should use the 
> Cleaner instead of finalize
>   https://bugs.openjdk.java.net/browse/JDK-8187325
> Thanks, Roger

More information about the core-libs-dev mailing list