RFR: 8297427: Avoid keeping class loaders alive when executing ClassLoaderStatsVMOperation [v3]

Stefan Johansson sjohanss at openjdk.org
Thu Dec 1 08:56:55 UTC 2022


> Please review this change to avoid keeping classes alive only due to the `ClassLoaderStatsVMOperation`.
> 
> **Summary**
> The `ClassLoaderStatsVMOperation` is gathering statistics about the active class loaders in a safepoint. The way the `ClassLoaderDataGraph` is iterated will keep the class loaders live. This is not really needed since everything is done in a safepoint and nothing needs to be explicitly kept alive. This has not been a problem prior to concurrent class unloading in ZGC. With fully concurrent class unloading a `ClassLoaderStatsVMOperation` can occur during a collection and more classes than needed might be kept alive. This could in turn lead to premature Metaspace OOM. 
> 
> The solution is to not keep the class loaders alive due to the iteration in `ClassLoaderStatsVMOperation`.
> 
> **Testing**
> * Added a new test that covers the two different ways a class could previously be kept alive by the VM operation. The test passes after the fix but failed before.  
> * Mach5 tier 1-3

Stefan Johansson has updated the pull request incrementally with one additional commit since the last revision:

  dholmes review

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/11300/files
  - new: https://git.openjdk.org/jdk/pull/11300/files/f6dba7f2..3c232f94

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=11300&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=11300&range=01-02

  Stats: 20 lines in 1 file changed: 6 ins; 3 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/11300.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11300/head:pull/11300

PR: https://git.openjdk.org/jdk/pull/11300


More information about the hotspot-dev mailing list