RFR 8080225: FileInputStream cleanup should be improved

Roger Riggs Roger.Riggs at Oracle.com
Fri Sep 29 17:17:34 UTC 2017

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 

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

Thanks, Roger

More information about the core-libs-dev mailing list