diff -r 39d1de71faca -r b87d7b5d5ded src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java --- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Thu Oct 12 16:00:29 2017 +0200 +++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Thu Oct 12 10:28:20 2017 -0700 @@ -90,6 +90,18 @@ // Cleanable with an action which closes this channel's file descriptor private final Cleanable closer; + private static class Closer implements Runnable { + private final FileDescriptor fd; + + Closer(FileDescriptor fd) { + this.fd = fd; + } + + public void run() { + fdAccess.close(fd); + } + } + private FileChannelImpl(FileDescriptor fd, String path, boolean readable, boolean writable, Object parent) { @@ -101,8 +113,10 @@ this.nd = new FileDispatcherImpl(); // Register a cleaning action if and only if there is no parent // as the parent will take care of closing the file descriptor. - this.closer= parent != null ? null : - CleanerFactory.cleaner().register(this, () -> fdAccess.close(fd)); + // FileChannel is used by the LambdaMetaFactory so a lambda cannot + // be used here hence we use a nested class instead. + this.closer = parent != null ? null : + CleanerFactory.cleaner().register(this, new Closer(fd)); } // Used by FileInputStream.getChannel(), FileOutputStream.getChannel