< prev index next >
src/hotspot/share/gc/parallel/psScavenge.cpp
Print this page
@@ -42,11 +42,12 @@
#include "gc/shared/gcTimer.hpp"
#include "gc/shared/gcTrace.hpp"
#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"
#include "gc/shared/scavengableNMethods.hpp"
#include "gc/shared/spaceDecorator.inline.hpp"
@@ -94,22 +95,14 @@
switch (root_type) {
case ParallelRootType::universe:
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);
ClassLoaderDataGraph::cld_do(&cld_closure);
}
@@ -310,10 +303,11 @@
}
};
class ScavengeRootsTask : public AbstractGangTask {
StrongRootsScope _strong_roots_scope; // needed for Threads::possibly_parallel_threads_do
+ OopStorageSetStrongParState<false /* concurrent */, false /* is_const */> _oop_storage_strong_par_state;
SequentialSubTasksDone _subtasks;
PSOldGen* _old_gen;
HeapWord* _gen_top;
uint _active_workers;
bool _is_empty;
@@ -371,10 +365,18 @@
_subtasks.all_tasks_completed();
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
// stacks and expects a steal_work() to complete the draining if
// ParallelGCThreads is > 1.
< prev index next >