Mercurial > hg > truffle
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 } |