--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2013-02-26 10:10:11.852712805 -0800 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2013-02-26 10:10:11.638047496 -0800 @@ -1765,7 +1765,7 @@ update_committed_space(old_end, new_end); FreeRegionList expansion_list("Local Expansion List"); - MemRegion mr = _hrs.expand_by(old_end, new_end, &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 @@ -1820,7 +1820,9 @@ 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* 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"); @@ -2039,10 +2041,12 @@ g1_rs.size()/HeapWordSize); _g1_storage.initialize(g1_rs, 0); - _g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0); + _g1_committed = MemRegion((HeapWord*) _g1_storage.low(), (size_t) 0); _hrs.initialize((HeapWord*) _g1_reserved.start(), - (HeapWord*) _g1_reserved.end(), - _expansion_regions); + (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.