aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp')
-rw-r--r--src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
index 7b9ff1650..3834722fa 100644
--- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
+++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
@@ -52,14 +52,22 @@ void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) {
PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
ParCompactionManager* cm =
ParCompactionManager::gc_thread_compaction_manager(which);
+
PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
+ CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true);
CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true);
if (_java_thread != NULL)
- _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
+ _java_thread->oops_do(
+ &mark_and_push_closure,
+ &mark_and_push_from_clds,
+ &mark_and_push_in_blobs);
if (_vm_thread != NULL)
- _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
+ _vm_thread->oops_do(
+ &mark_and_push_closure,
+ &mark_and_push_from_clds,
+ &mark_and_push_in_blobs);
// Do the real work
cm->follow_marking_stacks();
@@ -89,7 +97,8 @@ void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) {
{
ResourceMark rm;
CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
- Threads::oops_do(&mark_and_push_closure, &each_active_code_blob);
+ CLDToOopClosure mark_and_push_from_cld(&mark_and_push_closure);
+ Threads::oops_do(&mark_and_push_closure, &mark_and_push_from_cld, &each_active_code_blob);
}
break;