Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
8.14.0, 9.11.0
-
None
Description
The methods getMetaData and setMetaData from Application have synchronized modifiers applied to them such that they block on the application instance.
This can cause blocking issues. When I looked at the monitor usage in our application running in production the Application metadata locks are responsible for 57% of all monitor usage.
I've included a screenshot of the monitor usage reverse call stacks.
The implementation should be changed to a ConcurrentHashMap so we can remove the synchronization from the getter and setter, and just use the hashmap's O(1) lookup rather than MetaDataKey's O( 1) lookup. This will eliminate the blocking and (possibly) long lookups of metadata in the Application instance.
Note this does not involve modifying the component, session or requestcycle metadata implementations (yet).
IMO this should be backported to at least 9, as this is a semver compatible change.