8193072: File.delete() should remove its path from DeleteOnExitHook.files

Lance Andersen lance.andersen at oracle.com
Mon Jul 8 20:30:30 UTC 2019


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.burkhalter at 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.Andersen at oracle.com <mailto:Lance.Andersen at oracle.com>





More information about the core-libs-dev mailing list