comparison src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp @ 1000:a1423fe86a18

Merge
author trims
date Fri, 09 Oct 2009 15:18:52 -0700
parents 89e0543e1737 54b3b351d6f9
children 2a1472c30599
comparison
equal deleted inserted replaced
984:6ddec5389232 1000:a1423fe86a18
37 NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask", 37 NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask",
38 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); 38 PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
39 ParCompactionManager* cm = 39 ParCompactionManager* cm =
40 ParCompactionManager::gc_thread_compaction_manager(which); 40 ParCompactionManager::gc_thread_compaction_manager(which);
41 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 41 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
42 CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true);
42 43
43 if (_java_thread != NULL) 44 if (_java_thread != NULL)
44 _java_thread->oops_do(&mark_and_push_closure); 45 _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
45 46
46 if (_vm_thread != NULL) 47 if (_vm_thread != NULL)
47 _vm_thread->oops_do(&mark_and_push_closure); 48 _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
48 49
49 // Do the real work 50 // Do the real work
50 cm->drain_marking_stacks(&mark_and_push_closure); 51 cm->drain_marking_stacks(&mark_and_push_closure);
51 } 52 }
52 53
76 break; 77 break;
77 78
78 case threads: 79 case threads:
79 { 80 {
80 ResourceMark rm; 81 ResourceMark rm;
81 Threads::oops_do(&mark_and_push_closure); 82 CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
83 Threads::oops_do(&mark_and_push_closure, &each_active_code_blob);
82 } 84 }
83 break; 85 break;
84 86
85 case object_synchronizer: 87 case object_synchronizer:
86 ObjectSynchronizer::oops_do(&mark_and_push_closure); 88 ObjectSynchronizer::oops_do(&mark_and_push_closure);
102 SystemDictionary::always_strong_oops_do(&mark_and_push_closure); 104 SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
103 break; 105 break;
104 106
105 case vm_symbols: 107 case vm_symbols:
106 vmSymbols::oops_do(&mark_and_push_closure); 108 vmSymbols::oops_do(&mark_and_push_closure);
109 break;
110
111 case code_cache:
112 // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
113 //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(&mark_and_push_closure));
107 break; 114 break;
108 115
109 default: 116 default:
110 fatal("Unknown root type"); 117 fatal("Unknown root type");
111 } 118 }