From 28879d3d03ca6e8ea68a6063da349d83310b22ce Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Fri, 19 Sep 2025 07:37:14 +0000 Subject: [PATCH] 8367848: Parallel: Use NMethodToOopClosure during Young GC Reviewed-by: stefank, tschatzl --- src/hotspot/share/gc/parallel/psScavenge.cpp | 6 +++--- src/hotspot/share/runtime/threads.hpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/gc/parallel/psScavenge.cpp b/src/hotspot/share/gc/parallel/psScavenge.cpp index d32a8d239d1..676d9e74dbf 100644 --- a/src/hotspot/share/gc/parallel/psScavenge.cpp +++ b/src/hotspot/share/gc/parallel/psScavenge.cpp @@ -99,7 +99,7 @@ static void scavenge_roots_work(ParallelRootType::Value root_type, uint worker_i case ParallelRootType::code_cache: { - MarkingNMethodClosure code_closure(&roots_to_old_closure, NMethodToOopClosure::FixRelocations, false /* keepalive nmethods */); + NMethodToOopClosure code_closure(&roots_to_old_closure, NMethodToOopClosure::FixRelocations); ScavengableNMethods::nmethods_do(&code_closure); } break; @@ -234,7 +234,7 @@ public: }; class ScavengeRootsTask : public WorkerTask { - StrongRootsScope _strong_roots_scope; // needed for Threads::possibly_parallel_threads_do + ThreadsClaimTokenScope _threads_claim_token_scope; // needed for Threads::possibly_parallel_threads_do OopStorageSetStrongParState _oop_storage_strong_par_state; SequentialSubTasksDone _subtasks; PSOldGen* _old_gen; @@ -247,7 +247,7 @@ public: ScavengeRootsTask(PSOldGen* old_gen, uint active_workers) : WorkerTask("ScavengeRootsTask"), - _strong_roots_scope(active_workers), + _threads_claim_token_scope(), _subtasks(ParallelRootType::sentinel), _old_gen(old_gen), _gen_top(old_gen->object_space()->top()), diff --git a/src/hotspot/share/runtime/threads.hpp b/src/hotspot/share/runtime/threads.hpp index c6428c874f6..f630cde8747 100644 --- a/src/hotspot/share/runtime/threads.hpp +++ b/src/hotspot/share/runtime/threads.hpp @@ -145,4 +145,14 @@ public: struct Test; // For private gtest access. }; +// Used by GC for calling Threads::possibly_parallel_oops_do. +struct ThreadsClaimTokenScope : StackObj { + ThreadsClaimTokenScope() { + Threads::change_thread_claim_token(); + } + ~ThreadsClaimTokenScope() { + Threads::assert_all_threads_claimed(); + } +}; + #endif // SHARE_RUNTIME_THREADS_HPP