RFR (S): 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert

John Cuthbertson john.cuthbertson at oracle.com
Tue May 7 00:08:51 UTC 2013

Hi Bengt,

This looks good. The simplification to use region numbers is inspired.


On 5/6/2013 1:24 PM, Bengt Rutisson wrote:
> Hi everyone,
> Could I have a couple of reviews for this change?
> http://cr.openjdk.java.net/~brutisso/8013872/webrev.00/
> Background:
> The method HeapRegionSeq::shrink_by() has an invalid assert. It wants 
> to assert that we leave at least one region, but it triggers too early 
> so if we want to shrink down to one single region we hit the assert.
> When I started fixing the assert I thought the code was unnecessarily 
> complicated. The method G1CollectedHeap::shrink_helper() uses both a 
> number of regions and byte sizes to handle the shrinking. Both of 
> these concepts are propagated down to HeapRegionSeq::shrink_by(), but 
> that is not really necessary. It is enough for 
> HeapRegionSeq::shrink_by() to know about the number of regions. That 
> simplifies the code quite a bit and removes the need to have asserts 
> that check that the byte sizes and region counts match.
> So, rather than just fixing or removing the failing assert I 
> refactored the code a bit to reduce the need for several of the 
> asserts. I also changed the increment/decrement_length() methods that 
> were a bit strange.
> I think the HeapRegionSeq::expand_by() method can be simplified in a 
> similar way, but I would like to limit this change to the shrinking.
> I've tested the changes with JPRT and by running SPECjbb2005 with 
> -XX:+PrintAdaptiveSizePolicy enabled to see that I get some heap 
> shrinking.
> The JTreg test that I am adding only fails on fastdebug or debug 
> builds before my fix since it is an assert that is failing. 
> Unfortunately there is no way to control that this test should only be 
> run on fastdebug or debug builds.
> Thanks,
> Bengt

More information about the hotspot-gc-dev mailing list