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