src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

Print this page
rev 4204 : 7163191: G1: introduce a "heap spanning table" abstraction
Summary: Add a heap spanning table and employ it for the heap region sequence table.
Reviewed-by:

*** 1763,1773 **** // Then propagate this update to the necessary data structures. HeapWord* new_end = (HeapWord*) _g1_storage.high(); update_committed_space(old_end, new_end); FreeRegionList expansion_list("Local Expansion List"); ! MemRegion mr = _hrs.expand_by(old_end, new_end, &expansion_list); assert(mr.start() == old_end, "post-condition"); // mr might be a smaller region than what was requested if // expand_by() was unable to allocate the HeapRegion instances assert(mr.end() <= new_end, "post-condition"); --- 1763,1773 ---- // Then propagate this update to the necessary data structures. HeapWord* new_end = (HeapWord*) _g1_storage.high(); update_committed_space(old_end, new_end); FreeRegionList expansion_list("Local Expansion List"); ! MemRegion mr = _hrs.expand_to(new_end, &expansion_list); assert(mr.start() == old_end, "post-condition"); // mr might be a smaller region than what was requested if // expand_by() was unable to allocate the HeapRegion instances assert(mr.end() <= new_end, "post-condition");
*** 1818,1828 **** size_t aligned_shrink_bytes = ReservedSpace::page_align_size_down(shrink_bytes); aligned_shrink_bytes = align_size_down(aligned_shrink_bytes, HeapRegion::GrainBytes); uint num_regions_deleted = 0; ! MemRegion mr = _hrs.shrink_by(aligned_shrink_bytes, &num_regions_deleted); HeapWord* old_end = (HeapWord*) _g1_storage.high(); assert(mr.end() == old_end, "post-condition"); ergo_verbose3(ErgoHeapSizing, "shrink the heap", --- 1818,1830 ---- size_t aligned_shrink_bytes = ReservedSpace::page_align_size_down(shrink_bytes); aligned_shrink_bytes = align_size_down(aligned_shrink_bytes, HeapRegion::GrainBytes); uint num_regions_deleted = 0; ! HeapWord* desired_new_end = ! (HeapWord*) _g1_storage.high() - (aligned_shrink_bytes / HeapWordSize); ! MemRegion mr = _hrs.shrink_to(desired_new_end, &num_regions_deleted); HeapWord* old_end = (HeapWord*) _g1_storage.high(); assert(mr.end() == old_end, "post-condition"); ergo_verbose3(ErgoHeapSizing, "shrink the heap",
*** 2037,2050 **** ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); _g1_reserved = MemRegion((HeapWord*)g1_rs.base(), g1_rs.size()/HeapWordSize); _g1_storage.initialize(g1_rs, 0); ! _g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0); _hrs.initialize((HeapWord*) _g1_reserved.start(), ! (HeapWord*) _g1_reserved.end(), ! _expansion_regions); // 6843694 - ensure that the maximum region index can fit // in the remembered set structures. const uint max_region_idx = (1U << (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1; guarantee((max_regions() - 1) <= max_region_idx, "too many regions"); --- 2039,2054 ---- ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); _g1_reserved = MemRegion((HeapWord*)g1_rs.base(), g1_rs.size()/HeapWordSize); _g1_storage.initialize(g1_rs, 0); ! _g1_committed = MemRegion((HeapWord*) _g1_storage.low(), (size_t) 0); _hrs.initialize((HeapWord*) _g1_reserved.start(), ! (HeapWord*) _g1_reserved.end()); ! assert(_hrs.max_length() == _expansion_regions, ! err_msg("max length: %u expansion regions: %u", ! _hrs.max_length(), _expansion_regions)); // 6843694 - ensure that the maximum region index can fit // in the remembered set structures. const uint max_region_idx = (1U << (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1; guarantee((max_regions() - 1) <= max_region_idx, "too many regions");