RFR: 8040935: -XX:+AggressiveOpts broken: GC triggered before VM initialization completed on several tests

Stefan Johansson stefan.johansson at oracle.com
Thu Jan 15 15:10:13 UTC 2015

Hi again,

On 2015-01-15 15:12, Stefan Johansson wrote:
> On 2015-01-15 00:49, Stefan Johansson wrote:
>> Hi Kim,
>> On 2015-01-14 19:13, Kim Barrett wrote:
>>> On Jan 12, 2015, at 5:01 AM, Stefan Johansson 
>>> <stefan.johansson at oracle.com> wrote:
>>>> Please review this testfix to avoid the following issue:
>>>> https://bugs.openjdk.java.net/browse/JDK-8040935
>>>> Webrev:
>>>> http://cr.openjdk.java.net/~sjohanss/8040935/hotspot.00
>>>> Summary:
>>>> Making the test a driver test to avoid dealing with externally 
>>>> specified flags. One problematic flag is AggressiveOpts, it causes 
>>>> the VM to allocate more stuff during startup and that together with 
>>>> UseNUMA the eden space gets to little to handle all startup 
>>>> allocations. This will in turn lead to a GC being triggered before 
>>>> initialization is finished, and because of that failing the test.
>>>> Testing:
>>>> * Tested via JPRT
>>> test/gc/TestNUMAPageSize.java
>>> Summary: Changed test to not be affected by external options.
>>> I'm not sure I like this approach to resolving the bug.  I think it
>>> results in many potentially interesting configurations never being
>>> tested, e.g. this tests with one and only one GC, the default GC.  It
>>> ignores the nightly build cycling through various configurations to
>>> increase test coverage.
>> Thanks for taking a look at this. I see your point and think we 
>> should do something better. The test was originally written to test a 
>> specific regression we had when starting with -Xmx8m and -XX:+UseNUMA 
>> with the default collector, but that doesn't mean we shouldn't test 
>> it for the others as well. I'm not sure if we have any NUMA support 
>> for the other collectors today, but no harm in testing that the 
>> option doesn't cause any problems.
>> I see two ways of improving the coverage, one would be to use 
>> @requires to say that AggressiveOpts can't be true, but that will 
>> still leave the possibility to set other options that might push us 
>> over the limit of allocations during startup. The other way would be 
>> to extend the test to run with all collectors explicitly, but ignore 
>> any options passed in. This would of course still have less coverage 
>> than today, but at least all collectors would be covered.
>> I would prefer the second one, it would be robust and the coverage 
>> would be ok.
> Updated webrev that tests all GCs:
> http://cr.openjdk.java.net/~sjohanss/8040935/hotspot.01/
> Verified that the test still passes when run through JPRT.
I think I've changed my mind. After some discussions here in Stockholm, 
and after seeing that gc/TestSmallHeap.java fails for the same reason, 
I'm starting to think that @requires is the way to go. We don't want to 
re-write all tests using small heaps just because it doesn't work with 
AggressiveOpts, that will loose too much test coverage and I think we 
should solve similar issues the same way.

New proposal:


> Thanks,
> Stefan
>> Thanks,
>> Stefan

More information about the hotspot-gc-dev mailing list