--- old/src/hotspot/share/gc/parallel/psScavenge.cpp 2020-06-23 12:27:46.165327704 +0200 +++ new/src/hotspot/share/gc/parallel/psScavenge.cpp 2020-06-23 12:27:45.885321662 +0200 @@ -44,7 +44,8 @@ #include "gc/shared/gcTraceTime.inline.hpp" #include "gc/shared/isGCActiveMark.hpp" #include "gc/shared/oopStorage.inline.hpp" -#include "gc/shared/oopStorageSet.hpp" +#include "gc/shared/oopStorageSetParState.inline.hpp" +#include "gc/shared/oopStorageParState.inline.hpp" #include "gc/shared/referencePolicy.hpp" #include "gc/shared/referenceProcessor.hpp" #include "gc/shared/referenceProcessorPhaseTimes.hpp" @@ -96,18 +97,10 @@ Universe::oops_do(&roots_closure); break; - case ParallelRootType::jni_handles: - JNIHandles::oops_do(&roots_closure); - break; - case ParallelRootType::object_synchronizer: ObjectSynchronizer::oops_do(&roots_closure); break; - case ParallelRootType::vm_global: - OopStorageSet::vm_global()->oops_do(&roots_closure); - break; - case ParallelRootType::class_loader_data: { PSScavengeCLDClosure cld_closure(pm); @@ -312,6 +305,7 @@ class ScavengeRootsTask : public AbstractGangTask { StrongRootsScope _strong_roots_scope; // needed for Threads::possibly_parallel_threads_do + OopStorageSetStrongParState _oop_storage_strong_par_state; SequentialSubTasksDone _subtasks; PSOldGen* _old_gen; HeapWord* _gen_top; @@ -373,6 +367,14 @@ PSThreadRootsTaskClosure closure(worker_id); Threads::possibly_parallel_threads_do(true /*parallel */, &closure); + // Scavenge OopStorages + { + PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(worker_id); + PSScavengeRootsClosure closure(pm); + _oop_storage_strong_par_state.oops_do(&closure); + // Do the real work + pm->drain_stacks(false); + } // If active_workers can exceed 1, add a steal_work(). // PSPromotionManager::drain_stacks_depth() does not fully drain its