RFR: 8297427: Avoid keeping class loaders alive when executing ClassLoaderStatsVMOperation [v2]
Stefan Karlsson
stefank at openjdk.org
Wed Nov 30 12:01:20 UTC 2022
On Wed, 30 Nov 2022 09:08:52 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:
>> 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 three additional commits since the last revision:
>
> - Print object to ensure it is kept alive
> - Revert "Axel comments to use templates"
>
> This reverts commit 8800ef089b62cf173147b68adb2ee993b7e72980.
> - Revert "Missing include for minimal"
>
> This reverts commit 424e0f9d831279ba2d1986ebacb499f8d4a6c078.
Looks good!
-------------
Marked as reviewed by stefank (Reviewer).
PR: https://git.openjdk.org/jdk/pull/11300
More information about the hotspot-dev
mailing list