Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/parallelScavenge/psTasks.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 | d1605aabd0a1 |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
987:00977607da34 | 989:148e5441d916 |
---|---|
64 break; | 64 break; |
65 | 65 |
66 case threads: | 66 case threads: |
67 { | 67 { |
68 ResourceMark rm; | 68 ResourceMark rm; |
69 Threads::oops_do(&roots_closure); | 69 Threads::oops_do(&roots_closure, NULL); |
70 } | 70 } |
71 break; | 71 break; |
72 | 72 |
73 case object_synchronizer: | 73 case object_synchronizer: |
74 ObjectSynchronizer::oops_do(&roots_closure); | 74 ObjectSynchronizer::oops_do(&roots_closure); |
88 | 88 |
89 case jvmti: | 89 case jvmti: |
90 JvmtiExport::oops_do(&roots_closure); | 90 JvmtiExport::oops_do(&roots_closure); |
91 break; | 91 break; |
92 | 92 |
93 | |
94 case code_cache: | |
95 { | |
96 CodeBlobToOopClosure each_scavengable_code_blob(&roots_closure, /*do_marking=*/ true); | |
97 CodeCache::scavenge_root_nmethods_do(&each_scavengable_code_blob); | |
98 } | |
99 break; | |
100 | |
93 default: | 101 default: |
94 fatal("Unknown root type"); | 102 fatal("Unknown root type"); |
95 } | 103 } |
96 | 104 |
97 // Do the real work | 105 // Do the real work |
105 void ThreadRootsTask::do_it(GCTaskManager* manager, uint which) { | 113 void ThreadRootsTask::do_it(GCTaskManager* manager, uint which) { |
106 assert(Universe::heap()->is_gc_active(), "called outside gc"); | 114 assert(Universe::heap()->is_gc_active(), "called outside gc"); |
107 | 115 |
108 PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which); | 116 PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which); |
109 PSScavengeRootsClosure roots_closure(pm); | 117 PSScavengeRootsClosure roots_closure(pm); |
118 CodeBlobToOopClosure roots_in_blobs(&roots_closure, /*do_marking=*/ true); | |
110 | 119 |
111 if (_java_thread != NULL) | 120 if (_java_thread != NULL) |
112 _java_thread->oops_do(&roots_closure); | 121 _java_thread->oops_do(&roots_closure, &roots_in_blobs); |
113 | 122 |
114 if (_vm_thread != NULL) | 123 if (_vm_thread != NULL) |
115 _vm_thread->oops_do(&roots_closure); | 124 _vm_thread->oops_do(&roots_closure, &roots_in_blobs); |
116 | 125 |
117 // Do the real work | 126 // Do the real work |
118 pm->drain_stacks(false); | 127 pm->drain_stacks(false); |
119 } | 128 } |
120 | 129 |