< prev index next >

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

Print this page
rev 50092 : [mq]: allocations-rt.patch


 462   HeapWord* obj_addr = bottom() + BrooksPointer::word_size();
 463   HeapWord* t = top();
 464   // Could call objects iterate, but this is easier.
 465   while (obj_addr < t) {
 466     oop obj = oop(obj_addr);
 467     obj_addr += obj->oop_iterate_size(blk) + BrooksPointer::word_size();
 468   }
 469 }
 470 
 471 void ShenandoahHeapRegion::oop_iterate_humongous(ExtendedOopClosure* blk) {
 472   assert(is_humongous(), "only humongous region here");
 473   // Find head.
 474   ShenandoahHeapRegion* r = humongous_start_region();
 475   assert(r->is_humongous_start(), "need humongous head here");
 476   oop obj = oop(r->bottom() + BrooksPointer::word_size());
 477   obj->oop_iterate(blk, MemRegion(bottom(), top()));
 478 }
 479 
 480 void ShenandoahHeapRegion::fill_region() {
 481   if (free() > (BrooksPointer::word_size() + CollectedHeap::min_fill_size())) {
 482     HeapWord* filler = allocate(BrooksPointer::word_size(), ShenandoahHeap::_alloc_shared);
 483     HeapWord* obj = allocate(end() - top(), ShenandoahHeap::_alloc_shared);
 484     _heap->fill_with_object(obj, end() - obj);
 485     BrooksPointer::initialize(oop(obj));
 486   }
 487 }
 488 
 489 ShenandoahHeapRegion* ShenandoahHeapRegion::humongous_start_region() const {
 490   assert(is_humongous(), "Must be a part of the humongous region");
 491   size_t reg_num = region_number();
 492   ShenandoahHeapRegion* r = const_cast<ShenandoahHeapRegion*>(this);
 493   while (!r->is_humongous_start()) {
 494     assert(reg_num > 0, "Sanity");
 495     reg_num --;
 496     r = _heap->get_region(reg_num);
 497     assert(r->is_humongous(), "Must be a part of the humongous region");
 498   }
 499   assert(r->is_humongous_start(), "Must be");
 500   return r;
 501 }
 502 
 503 void ShenandoahHeapRegion::recycle() {
 504   ContiguousSpace::clear(false);
 505   if (ZapUnusedHeapArea) {




 462   HeapWord* obj_addr = bottom() + BrooksPointer::word_size();
 463   HeapWord* t = top();
 464   // Could call objects iterate, but this is easier.
 465   while (obj_addr < t) {
 466     oop obj = oop(obj_addr);
 467     obj_addr += obj->oop_iterate_size(blk) + BrooksPointer::word_size();
 468   }
 469 }
 470 
 471 void ShenandoahHeapRegion::oop_iterate_humongous(ExtendedOopClosure* blk) {
 472   assert(is_humongous(), "only humongous region here");
 473   // Find head.
 474   ShenandoahHeapRegion* r = humongous_start_region();
 475   assert(r->is_humongous_start(), "need humongous head here");
 476   oop obj = oop(r->bottom() + BrooksPointer::word_size());
 477   obj->oop_iterate(blk, MemRegion(bottom(), top()));
 478 }
 479 
 480 void ShenandoahHeapRegion::fill_region() {
 481   if (free() > (BrooksPointer::word_size() + CollectedHeap::min_fill_size())) {

 482     HeapWord* obj = allocate(end() - top(), ShenandoahHeap::_alloc_shared);
 483     _heap->fill_with_object(obj, end() - obj);

 484   }
 485 }
 486 
 487 ShenandoahHeapRegion* ShenandoahHeapRegion::humongous_start_region() const {
 488   assert(is_humongous(), "Must be a part of the humongous region");
 489   size_t reg_num = region_number();
 490   ShenandoahHeapRegion* r = const_cast<ShenandoahHeapRegion*>(this);
 491   while (!r->is_humongous_start()) {
 492     assert(reg_num > 0, "Sanity");
 493     reg_num --;
 494     r = _heap->get_region(reg_num);
 495     assert(r->is_humongous(), "Must be a part of the humongous region");
 496   }
 497   assert(r->is_humongous_start(), "Must be");
 498   return r;
 499 }
 500 
 501 void ShenandoahHeapRegion::recycle() {
 502   ContiguousSpace::clear(false);
 503   if (ZapUnusedHeapArea) {


< prev index next >