mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 06:14:49 +02:00
8247820: ParallelGC: Process strong OopStorage entries in parallel
Reviewed-by: pliden, eosterlund, kbarrett, tschatzl
This commit is contained in:
parent
3797364ce9
commit
9d6aa42a7c
3 changed files with 24 additions and 22 deletions
|
@ -50,7 +50,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/oopStorageSet.inline.hpp"
|
||||
#include "gc/shared/oopStorageSetParState.inline.hpp"
|
||||
#include "gc/shared/referencePolicy.hpp"
|
||||
#include "gc/shared/referenceProcessor.hpp"
|
||||
#include "gc/shared/referenceProcessorPhaseTimes.hpp"
|
||||
|
@ -2015,10 +2016,6 @@ static void mark_from_roots_work(ParallelRootType::Value root_type, uint worker_
|
|||
Universe::oops_do(&mark_and_push_closure);
|
||||
break;
|
||||
|
||||
case ParallelRootType::jni_handles:
|
||||
JNIHandles::oops_do(&mark_and_push_closure);
|
||||
break;
|
||||
|
||||
case ParallelRootType::object_synchronizer:
|
||||
ObjectSynchronizer::oops_do(&mark_and_push_closure);
|
||||
break;
|
||||
|
@ -2031,10 +2028,6 @@ static void mark_from_roots_work(ParallelRootType::Value root_type, uint worker_
|
|||
JvmtiExport::oops_do(&mark_and_push_closure);
|
||||
break;
|
||||
|
||||
case ParallelRootType::vm_global:
|
||||
OopStorageSet::vm_global()->oops_do(&mark_and_push_closure);
|
||||
break;
|
||||
|
||||
case ParallelRootType::class_loader_data:
|
||||
{
|
||||
CLDToOopClosure cld_closure(&mark_and_push_closure, ClassLoaderData::_claim_strong);
|
||||
|
@ -2081,6 +2074,7 @@ static void steal_marking_work(TaskTerminator& terminator, uint worker_id) {
|
|||
class MarkFromRootsTask : public AbstractGangTask {
|
||||
typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
|
||||
StrongRootsScope _strong_roots_scope; // needed for Threads::possibly_parallel_threads_do
|
||||
OopStorageSetStrongParState<false /* concurrent */, false /* is_const */> _oop_storage_set_par_state;
|
||||
SequentialSubTasksDone _subtasks;
|
||||
TaskTerminator _terminator;
|
||||
uint _active_workers;
|
||||
|
@ -2105,6 +2099,15 @@ public:
|
|||
PCAddThreadRootsMarkingTaskClosure closure(worker_id);
|
||||
Threads::possibly_parallel_threads_do(true /*parallel */, &closure);
|
||||
|
||||
// Mark from OopStorages
|
||||
{
|
||||
ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(worker_id);
|
||||
PCMarkAndPushClosure closure(cm);
|
||||
_oop_storage_set_par_state.oops_do(&closure);
|
||||
// Do the real work
|
||||
cm->follow_marking_stacks();
|
||||
}
|
||||
|
||||
if (_active_workers > 1) {
|
||||
steal_marking_work(_terminator, worker_id);
|
||||
}
|
||||
|
@ -2235,12 +2238,11 @@ void PSParallelCompact::adjust_roots(ParCompactionManager* cm) {
|
|||
|
||||
// General strong roots.
|
||||
Universe::oops_do(&oop_closure);
|
||||
JNIHandles::oops_do(&oop_closure); // Global (strong) JNI handles
|
||||
Threads::oops_do(&oop_closure, NULL);
|
||||
ObjectSynchronizer::oops_do(&oop_closure);
|
||||
Management::oops_do(&oop_closure);
|
||||
JvmtiExport::oops_do(&oop_closure);
|
||||
OopStorageSet::vm_global()->oops_do(&oop_closure);
|
||||
OopStorageSet::strong_oops_do(&oop_closure);
|
||||
CLDToOopClosure cld_closure(&oop_closure, ClassLoaderData::_claim_strong);
|
||||
ClassLoaderDataGraph::cld_do(&cld_closure);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue