< prev index next >

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

Print this page
rev 59534 : 8245961: Shenandoah: move some root marking to concurrent phase


 506 ShenandoahNMethodList::ShenandoahNMethodList(int size) :
 507   _size(size), _ref_count(1) {
 508   _list = NEW_C_HEAP_ARRAY(ShenandoahNMethod*, size, mtGC);
 509 }
 510 
 511 ShenandoahNMethodList::~ShenandoahNMethodList() {
 512   assert(_list != NULL, "Sanity");
 513   assert(_ref_count == 0, "Must be");
 514   FREE_C_HEAP_ARRAY(ShenandoahNMethod*, _list);
 515 }
 516 
 517 void ShenandoahNMethodList::transfer(ShenandoahNMethodList* const list, int limit) {
 518   assert(limit <= size(), "Sanity");
 519   ShenandoahNMethod** old_list = list->list();
 520   for (int index = 0; index < limit; index++) {
 521     _list[index] = old_list[index];
 522   }
 523 }
 524 
 525 ShenandoahNMethodList* ShenandoahNMethodList::acquire() {
 526   assert(CodeCache_lock->owned_by_self(), "Lock must be held");
 527   _ref_count++;
 528   return this;
 529 }
 530 
 531 void ShenandoahNMethodList::release() {
 532   assert(CodeCache_lock->owned_by_self(), "Lock must be held");
 533   _ref_count--;
 534   if (_ref_count == 0) {
 535     delete this;
 536   }
 537 }
 538 
 539 ShenandoahNMethodTableSnapshot::ShenandoahNMethodTableSnapshot(ShenandoahNMethodTable* table) :
 540   _heap(ShenandoahHeap::heap()), _list(table->_list->acquire()), _limit(table->_index), _claimed(0) {
 541 }
 542 
 543 ShenandoahNMethodTableSnapshot::~ShenandoahNMethodTableSnapshot() {
 544   _list->release();
 545 }
 546 
 547 void ShenandoahNMethodTableSnapshot::parallel_blobs_do(CodeBlobClosure *f) {
 548   size_t stride = 256; // educated guess
 549 
 550   ShenandoahNMethod** const list = _list->list();
 551 
 552   size_t max = (size_t)_limit;




 506 ShenandoahNMethodList::ShenandoahNMethodList(int size) :
 507   _size(size), _ref_count(1) {
 508   _list = NEW_C_HEAP_ARRAY(ShenandoahNMethod*, size, mtGC);
 509 }
 510 
 511 ShenandoahNMethodList::~ShenandoahNMethodList() {
 512   assert(_list != NULL, "Sanity");
 513   assert(_ref_count == 0, "Must be");
 514   FREE_C_HEAP_ARRAY(ShenandoahNMethod*, _list);
 515 }
 516 
 517 void ShenandoahNMethodList::transfer(ShenandoahNMethodList* const list, int limit) {
 518   assert(limit <= size(), "Sanity");
 519   ShenandoahNMethod** old_list = list->list();
 520   for (int index = 0; index < limit; index++) {
 521     _list[index] = old_list[index];
 522   }
 523 }
 524 
 525 ShenandoahNMethodList* ShenandoahNMethodList::acquire() {
 526   assert_locked_or_safepoint(CodeCache_lock);
 527   _ref_count++;
 528   return this;
 529 }
 530 
 531 void ShenandoahNMethodList::release() {
 532   assert_locked_or_safepoint(CodeCache_lock);
 533   _ref_count--;
 534   if (_ref_count == 0) {
 535     delete this;
 536   }
 537 }
 538 
 539 ShenandoahNMethodTableSnapshot::ShenandoahNMethodTableSnapshot(ShenandoahNMethodTable* table) :
 540   _heap(ShenandoahHeap::heap()), _list(table->_list->acquire()), _limit(table->_index), _claimed(0) {
 541 }
 542 
 543 ShenandoahNMethodTableSnapshot::~ShenandoahNMethodTableSnapshot() {
 544   _list->release();
 545 }
 546 
 547 void ShenandoahNMethodTableSnapshot::parallel_blobs_do(CodeBlobClosure *f) {
 548   size_t stride = 256; // educated guess
 549 
 550   ShenandoahNMethod** const list = _list->list();
 551 
 552   size_t max = (size_t)_limit;


< prev index next >