comparison src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp @ 989:148e5441d916

6863023: need non-perm oops in code cache for JSR 292 Summary: Make a special root-list for those few nmethods which might contain non-perm oops. Reviewed-by: twisti, kvn, never, jmasa, ysr
author jrose
date Tue, 15 Sep 2009 21:53:47 -0700
parents 81cd571500b0
children 54b3b351d6f9
comparison
equal deleted inserted replaced
987:00977607da34 989:148e5441d916
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
77 break; 78 break;
78 79
79 case threads: 80 case threads:
80 { 81 {
81 ResourceMark rm; 82 ResourceMark rm;
82 Threads::oops_do(&mark_and_push_closure); 83 CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
84 Threads::oops_do(&mark_and_push_closure, &each_active_code_blob);
83 } 85 }
84 break; 86 break;
85 87
86 case object_synchronizer: 88 case object_synchronizer:
87 ObjectSynchronizer::oops_do(&mark_and_push_closure); 89 ObjectSynchronizer::oops_do(&mark_and_push_closure);
103 SystemDictionary::always_strong_oops_do(&mark_and_push_closure); 105 SystemDictionary::always_strong_oops_do(&mark_and_push_closure);
104 break; 106 break;
105 107
106 case vm_symbols: 108 case vm_symbols:
107 vmSymbols::oops_do(&mark_and_push_closure); 109 vmSymbols::oops_do(&mark_and_push_closure);
110 break;
111
112 case code_cache:
113 // Do not treat nmethods as strong roots for mark/sweep, since we can unload them.
114 //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(&mark_and_push_closure));
108 break; 115 break;
109 116
110 default: 117 default:
111 fatal("Unknown root type"); 118 fatal("Unknown root type");
112 } 119 }