4503 if (!has_more_regions(dest)) {
4504 return NULL;
4505 }
4506
4507 const bool is_survivor = dest.is_young();
4508
4509 HeapRegion* new_alloc_region = new_region(word_size,
4510 !is_survivor,
4511 true /* do_expand */);
4512 if (new_alloc_region != NULL) {
4513 if (is_survivor) {
4514 new_alloc_region->set_survivor();
4515 _survivor.add(new_alloc_region);
4516 _verifier->check_bitmaps("Survivor Region Allocation", new_alloc_region);
4517 } else {
4518 new_alloc_region->set_old();
4519 _verifier->check_bitmaps("Old Region Allocation", new_alloc_region);
4520 }
4521 _g1_policy->remset_tracker()->update_at_allocate(new_alloc_region);
4522 _hr_printer.alloc(new_alloc_region);
4523 bool during_im = collector_state()->in_initial_mark_gc();
4524 new_alloc_region->note_start_of_copying(during_im);
4525 return new_alloc_region;
4526 }
4527 return NULL;
4528 }
4529
4530 void G1CollectedHeap::retire_gc_alloc_region(HeapRegion* alloc_region,
4531 size_t allocated_bytes,
4532 InCSetState dest) {
4533 bool during_im = collector_state()->in_initial_mark_gc();
4534 alloc_region->note_end_of_copying(during_im);
4535 g1_policy()->record_bytes_copied_during_gc(allocated_bytes);
4536 if (dest.is_old()) {
4537 old_set_add(alloc_region);
4538 }
4539 _hr_printer.retire(alloc_region);
4540 }
4541
4542 HeapRegion* G1CollectedHeap::alloc_highest_free_region() {
4543 bool expanded = false;
4544 uint index = _hrm.find_highest_free(&expanded);
4545
4546 if (index != G1_NO_HRM_INDEX) {
4547 if (expanded) {
4548 log_debug(gc, ergo, heap)("Attempt heap expansion (requested address range outside heap bounds). region size: " SIZE_FORMAT "B",
4549 HeapRegion::GrainWords * HeapWordSize);
4550 }
4551 _hrm.allocate_free_regions_starting_at(index, 1);
4552 return region_at(index);
4553 }
4554 return NULL;
4555 }
4556
4557 // Optimized nmethod scanning
|
4503 if (!has_more_regions(dest)) {
4504 return NULL;
4505 }
4506
4507 const bool is_survivor = dest.is_young();
4508
4509 HeapRegion* new_alloc_region = new_region(word_size,
4510 !is_survivor,
4511 true /* do_expand */);
4512 if (new_alloc_region != NULL) {
4513 if (is_survivor) {
4514 new_alloc_region->set_survivor();
4515 _survivor.add(new_alloc_region);
4516 _verifier->check_bitmaps("Survivor Region Allocation", new_alloc_region);
4517 } else {
4518 new_alloc_region->set_old();
4519 _verifier->check_bitmaps("Old Region Allocation", new_alloc_region);
4520 }
4521 _g1_policy->remset_tracker()->update_at_allocate(new_alloc_region);
4522 _hr_printer.alloc(new_alloc_region);
4523 return new_alloc_region;
4524 }
4525 return NULL;
4526 }
4527
4528 void G1CollectedHeap::retire_gc_alloc_region(HeapRegion* alloc_region,
4529 size_t allocated_bytes,
4530 InCSetState dest) {
4531 g1_policy()->record_bytes_copied_during_gc(allocated_bytes);
4532 if (dest.is_old()) {
4533 old_set_add(alloc_region);
4534 }
4535
4536 bool const during_im = collector_state()->in_initial_mark_gc();
4537 if (during_im && allocated_bytes > 0) {
4538 _cm->root_regions()->add(alloc_region);
4539 }
4540 _hr_printer.retire(alloc_region);
4541 }
4542
4543 HeapRegion* G1CollectedHeap::alloc_highest_free_region() {
4544 bool expanded = false;
4545 uint index = _hrm.find_highest_free(&expanded);
4546
4547 if (index != G1_NO_HRM_INDEX) {
4548 if (expanded) {
4549 log_debug(gc, ergo, heap)("Attempt heap expansion (requested address range outside heap bounds). region size: " SIZE_FORMAT "B",
4550 HeapRegion::GrainWords * HeapWordSize);
4551 }
4552 _hrm.allocate_free_regions_starting_at(index, 1);
4553 return region_at(index);
4554 }
4555 return NULL;
4556 }
4557
4558 // Optimized nmethod scanning
|