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;
|