RFR: 8297427: Avoid keeping class loaders alive when executing ClassLoaderStatsVMOperation
Stefan Johansson
sjohanss at openjdk.org
Wed Nov 23 16:06:20 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
-------------
Commit messages:
- Missing include for minimal
- Axel comments to use templates
- Fix test indent
- Move ChildClassLoader into test
- Add parent_no_keepalive to allow class unloading in parents
- Extend test to cover keep alive through access to parent
- Avoid keeping CLD alive for class loader stats vm op
- Test to provoke failed class unloading
Changes: https://git.openjdk.org/jdk/pull/11300/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11300&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8297427
Stats: 346 lines in 19 files changed: 282 ins; 51 del; 13 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