< prev index next >
src/share/vm/gc/g1/g1CollectedHeap.cpp
Print this page
*** 5403,5452 ****
g1mm()->update_eden_size();
}
// Methods for the GC alloc regions
! HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size,
! uint count,
! InCSetState dest) {
assert(FreeList_lock->owned_by_self(), "pre-condition");
! if (count < g1_policy()->max_regions(dest)) {
! const bool is_survivor = (dest.is_young());
HeapRegion* new_alloc_region = new_region(word_size,
!is_survivor,
true /* do_expand */);
if (new_alloc_region != NULL) {
// We really only need to do this for old regions given that we
// should never scan survivors. But it doesn't hurt to do it
// for survivors too.
new_alloc_region->record_timestamp();
if (is_survivor) {
new_alloc_region->set_survivor();
_verifier->check_bitmaps("Survivor Region Allocation", new_alloc_region);
} else {
new_alloc_region->set_old();
_verifier->check_bitmaps("Old Region Allocation", new_alloc_region);
}
_hr_printer.alloc(new_alloc_region);
bool during_im = collector_state()->during_initial_mark_pause();
new_alloc_region->note_start_of_copying(during_im);
return new_alloc_region;
}
- }
return NULL;
}
void G1CollectedHeap::retire_gc_alloc_region(HeapRegion* alloc_region,
size_t allocated_bytes,
InCSetState dest) {
bool during_im = collector_state()->during_initial_mark_pause();
alloc_region->note_end_of_copying(during_im);
g1_policy()->record_bytes_copied_during_gc(allocated_bytes);
! if (dest.is_young()) {
! young_list()->add_survivor_region(alloc_region);
! } else {
_old_set.add(alloc_region);
}
_hr_printer.retire(alloc_region);
}
--- 5403,5452 ----
g1mm()->update_eden_size();
}
// Methods for the GC alloc regions
! HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size, InCSetState dest) {
assert(FreeList_lock->owned_by_self(), "pre-condition");
! const bool is_survivor = dest.is_young();
!
! if (is_survivor && young_list()->survivor_length() >= g1_policy()->max_survivor_regions()) {
! return NULL;
! }
!
HeapRegion* new_alloc_region = new_region(word_size,
!is_survivor,
true /* do_expand */);
if (new_alloc_region != NULL) {
// We really only need to do this for old regions given that we
// should never scan survivors. But it doesn't hurt to do it
// for survivors too.
new_alloc_region->record_timestamp();
if (is_survivor) {
new_alloc_region->set_survivor();
+ young_list()->add_survivor_region(new_alloc_region);
_verifier->check_bitmaps("Survivor Region Allocation", new_alloc_region);
} else {
new_alloc_region->set_old();
_verifier->check_bitmaps("Old Region Allocation", new_alloc_region);
}
_hr_printer.alloc(new_alloc_region);
bool during_im = collector_state()->during_initial_mark_pause();
new_alloc_region->note_start_of_copying(during_im);
return new_alloc_region;
}
return NULL;
}
void G1CollectedHeap::retire_gc_alloc_region(HeapRegion* alloc_region,
size_t allocated_bytes,
InCSetState dest) {
bool during_im = collector_state()->during_initial_mark_pause();
alloc_region->note_end_of_copying(during_im);
g1_policy()->record_bytes_copied_during_gc(allocated_bytes);
! if (dest.is_old()) {
_old_set.add(alloc_region);
}
_hr_printer.retire(alloc_region);
}
< prev index next >