RFR: 8031686: G1: assert(_hrs.max_length() == _expansion_regions) failed

Stefan Johansson stefan.johansson at oracle.com
Fri Jan 17 14:23:32 UTC 2014


Hi again,

I've added a regression test for the issue. See the updated review at:
http://cr.openjdk.java.net/~sjohanss/8031686/webrev.01/

The test is naive and just tries to run -version with a heap size of 2g. 
I don't explicitly set G1 as GC but make sure I will use the arguments 
given to jtreg, this will ensure testing more than one GC and also that 
we do not run with G1 on unsupported platforms.

Please have a look at the test and let me know if you have any questions 
or suggestions.

Thanks,
Stefan

On 2014-01-16 14:43, Stefan Johansson wrote:
> Hi,
>
> Please review this small fix for:
> https://bugs.openjdk.java.net/browse/JDK-8031686
>
> Webrev:
> http://cr.openjdk.java.net/~sjohanss/8031686/webrev.00/
>
> Summary:
> The failing assertion is caused by an erroneous calculation done when 
> setting up the regions array in HeapRegionSeq. When using a large heap 
> a pointer calculation will overflow (since ptrdiff_t is signed) and 
> this will in turn lead to the regions array being created longer that 
> it should be. For non debug builds this will lead to increased memory 
> usage and jmap will report a faulty value for the number of regions. 
> The fix is to use the pointer_delta-function to do the calculation.
>
> Note: The bug is currently targeted for 8 but is defer-requested and 
> should be moved to 9 shortly. I plan to fix it in 9 and backport it to 
> 8u20.
>
> Testing:
> * Manually verified that we are able to start 32-bit VMs with more 
> than 2g of heap using a debug build.
>
> Thanks,
> Stefan




More information about the hotspot-gc-dev mailing list