< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp

Print this page




 247 }
 248 
 249 void ShenandoahAllCodeRootsIterator::possibly_parallel_blobs_do(CodeBlobClosure *f) {
 250   ShenandoahCodeRootsIterator::dispatch_parallel_blobs_do<false>(f);
 251 }
 252 
 253 void ShenandoahCsetCodeRootsIterator::possibly_parallel_blobs_do(CodeBlobClosure *f) {
 254   ShenandoahCodeRootsIterator::dispatch_parallel_blobs_do<true>(f);
 255 }
 256 
 257 template <bool CSET_FILTER>
 258 void ShenandoahCodeRootsIterator::fast_parallel_blobs_do(CodeBlobClosure *f) {
 259   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint");
 260 
 261   size_t stride = 256; // educated guess
 262 
 263   GrowableArray<ShenandoahNMethod*>* list = ShenandoahCodeRoots::_recorded_nms;
 264 
 265   size_t max = (size_t)list->length();
 266   while (_claimed < max) {
 267     size_t cur = Atomic::add(stride, &_claimed) - stride;
 268     size_t start = cur;
 269     size_t end = MIN2(cur + stride, max);
 270     if (start >= max) break;
 271 
 272     for (size_t idx = start; idx < end; idx++) {
 273       ShenandoahNMethod* nmr = list->at((int) idx);
 274       nmr->assert_alive_and_correct();
 275 
 276       if (CSET_FILTER && !nmr->has_cset_oops(_heap)) {
 277         continue;
 278       }
 279 
 280       f->do_code_blob(nmr->nm());
 281     }
 282   }
 283 }
 284 
 285 ShenandoahNMethod::ShenandoahNMethod(nmethod* nm, GrowableArray<oop*>* oops) {
 286   _nm = nm;
 287   _oops = NEW_C_HEAP_ARRAY(oop*, oops->length(), mtGC);




 247 }
 248 
 249 void ShenandoahAllCodeRootsIterator::possibly_parallel_blobs_do(CodeBlobClosure *f) {
 250   ShenandoahCodeRootsIterator::dispatch_parallel_blobs_do<false>(f);
 251 }
 252 
 253 void ShenandoahCsetCodeRootsIterator::possibly_parallel_blobs_do(CodeBlobClosure *f) {
 254   ShenandoahCodeRootsIterator::dispatch_parallel_blobs_do<true>(f);
 255 }
 256 
 257 template <bool CSET_FILTER>
 258 void ShenandoahCodeRootsIterator::fast_parallel_blobs_do(CodeBlobClosure *f) {
 259   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint");
 260 
 261   size_t stride = 256; // educated guess
 262 
 263   GrowableArray<ShenandoahNMethod*>* list = ShenandoahCodeRoots::_recorded_nms;
 264 
 265   size_t max = (size_t)list->length();
 266   while (_claimed < max) {
 267     size_t cur = Atomic::add(&_claimed, stride) - stride;
 268     size_t start = cur;
 269     size_t end = MIN2(cur + stride, max);
 270     if (start >= max) break;
 271 
 272     for (size_t idx = start; idx < end; idx++) {
 273       ShenandoahNMethod* nmr = list->at((int) idx);
 274       nmr->assert_alive_and_correct();
 275 
 276       if (CSET_FILTER && !nmr->has_cset_oops(_heap)) {
 277         continue;
 278       }
 279 
 280       f->do_code_blob(nmr->nm());
 281     }
 282   }
 283 }
 284 
 285 ShenandoahNMethod::ShenandoahNMethod(nmethod* nm, GrowableArray<oop*>* oops) {
 286   _nm = nm;
 287   _oops = NEW_C_HEAP_ARRAY(oop*, oops->length(), mtGC);


< prev index next >