comparison src/share/vm/memory/sharedHeap.cpp @ 7179:d0aa87f04bd5

8003720: NPG: Method in interpreter stack frame can be deallocated Summary: Pass down a closure during root scanning to keep the class of the method alive. Reviewed-by: coleenp, jcoomes
author stefank
date Tue, 27 Nov 2012 10:13:20 +0100
parents da91efe96a93
children be4d5c6c1f79
comparison
equal deleted inserted replaced
7178:19c1bd641922 7179:d0aa87f04bd5
152 } 152 }
153 // Global (strong) JNI handles 153 // Global (strong) JNI handles
154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) 154 if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do))
155 JNIHandles::oops_do(roots); 155 JNIHandles::oops_do(roots);
156 // All threads execute this; the individual threads are task groups. 156 // All threads execute this; the individual threads are task groups.
157 CLDToOopClosure roots_from_clds(roots);
158 CLDToOopClosure* roots_from_clds_p = (is_scavenging ? NULL : &roots_from_clds);
157 if (ParallelGCThreads > 0) { 159 if (ParallelGCThreads > 0) {
158 Threads::possibly_parallel_oops_do(roots, code_roots); 160 Threads::possibly_parallel_oops_do(roots, roots_from_clds_p ,code_roots);
159 } else { 161 } else {
160 Threads::oops_do(roots, code_roots); 162 Threads::oops_do(roots, roots_from_clds_p, code_roots);
161 } 163 }
162 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do)) 164 if (!_process_strong_tasks-> is_task_claimed(SH_PS_ObjectSynchronizer_oops_do))
163 ObjectSynchronizer::oops_do(roots); 165 ObjectSynchronizer::oops_do(roots);
164 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do)) 166 if (!_process_strong_tasks->is_task_claimed(SH_PS_FlatProfiler_oops_do))
165 FlatProfiler::oops_do(roots); 167 FlatProfiler::oops_do(roots);