Looks OK brian and does not seem to require any update to runHooks() so all good for me :-)
> On Jul 8, 2019, at 4:11 PM, Brian Burkhalter <brian.burkhal...@oracle.com> > wrote: > > https://bugs.openjdk.java.net/browse/JDK-8193072 > <https://bugs.openjdk.java.net/browse/JDK-8193072> > > There does appear to be a memory leak of sorts if one does something like > > — > > File[] files; > for (int i = 0; i < largeNumber; i++) { > files[i] = File.createTempFile(“blah”, null); > files[i].deleteOnExit(); > } > > // do something > > for (int i = 0; i < largeNumber; i++) { > files[i].delete(); > } > > // do something else before shutdown > > — > > The LinkedHashSet in DeleteOnExitHook will contain at least largeNumber Files > until the VM shuts down even though the files were deleted. > > The potential change is included below. The additional call to > DeleteOnExitHook.remove() in File.delete() does not appear to have a > measurable performance impact, at least trivially and in isolation. > > Thanks, > > Brian > > --- a/src/java.base/share/classes/java/io/DeleteOnExitHook.java > +++ b/src/java.base/share/classes/java/io/DeleteOnExitHook.java > @@ -64,6 +64,15 @@ > files.add(file); > } > > + static synchronized void remove(String file) { > + if(files == null) { > + // DeleteOnExitHook is running. Too late to remove a file > + throw new IllegalStateException("Shutdown in progress"); > + } > + > + files.remove(file); > + } > + > static void runHooks() { > LinkedHashSet<String> theFiles; > > --- a/src/java.base/share/classes/java/io/File.java > +++ b/src/java.base/share/classes/java/io/File.java > @@ -1050,6 +1050,7 @@ > if (isInvalid()) { > return false; > } > + DeleteOnExitHook.remove(path); > return fs.delete(this); > } > <http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif> <http://oracle.com/us/design/oracle-email-sig-198324.gif>Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037 Oracle Java Engineering 1 Network Drive Burlington, MA 01803 lance.ander...@oracle.com <mailto:lance.ander...@oracle.com>