java.beans.Introspector is using a new cache mechanism since Java9 in 
com.sun.beans.introspect.ClassInfo::CACHE which
uses a SoftReference cache over the class, which makes the class "leak", unless 
clearing the cache manually or
collecting the SoftReference by the GC.

Note that this is not a pure "leak", because the SoftReference will be 
collected if there is no enough memory on the
system, but if the heap is big enough then all objects referenced from the 
cached class will be in the memory.

The class has a reference to the ClassLoader, and If the soft reference to the 
class is not collected by the GC, then
the ClassLoader cannot be unloaded and this block the jar file removing.

The solution is to update the implementation of 
Introspector.flushCaches()/flushFromCaches(Class) to clear the whole
cache or the cache for the specific class.

-------------

Commit messages:
 - Update FlushClassInfoCache.java
 - Initial fix

Changes: https://git.openjdk.java.net/jdk/pull/647/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=647&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8231454
  Stats: 113 lines in 3 files changed: 109 ins; 1 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/647.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/647/head:pull/647

PR: https://git.openjdk.java.net/jdk/pull/647

Reply via email to