Integrated: JDK-8275704: Metaspace::contains() should be threadsafe

Thomas Stuefe stuefe at
Thu Oct 28 05:33:37 UTC 2021

On Thu, 21 Oct 2021 09:14:26 GMT, Thomas Stuefe <stuefe at> wrote:

> Metaspace::contains() is used in many places. It is not threadsafe since it walks the list of metaspace mappings, which can be altered concurrently. This is suspected to be the cause of JDK-8271124.
> Currently, it does not lock, and adding a lock is not realistic either. It should work lockless.
> This patch builds atop of, which removed the old (pre JEP 387) technique of uncommitting metaspace memory. As a side effect, that patch changed the mapping list to an add-only structure. The only remaining place where it gets modified is in VirtualSpaceList::create_node(). Modifications are synchronized via lock. The only place where we walk the list locklessly is in Metaspace::contains(). This patch adds the appropriate memory barriers to those two places.
> Tests:
> - GHAs
> - SAP nightlies (queued)

This pull request has now been integrated.

Changeset: d9b0138d
Author:    Thomas Stuefe <stuefe at>
Stats:     23 lines in 2 files changed: 15 ins; 1 del; 7 mod

8275704: Metaspace::contains() should be threadsafe

Reviewed-by: coleenp, dholmes



More information about the hotspot-runtime-dev mailing list