RFR(s): 8068582: UseSerialGC not always set up properly
Per Liden
per.liden at oracle.com
Mon Apr 20 08:28:11 UTC 2015
Hi Bengt,
On 2015-04-20 09:45, Bengt Rutisson wrote:
>
> Hi Per,
>
> On 2015-04-17 16:05, Per Liden wrote:
>> Hi,
>>
>> When no Use*GC flag is specified on the command-line we make a default
>> GC selection. In case we select SerialGC we fail to set UseSerialGC to
>> true (unlike when we select ParallelGC where we set UseParallelGC).
>> This means we can run with all Use*GC set to false (which implicitly
>> means we're using serial). It also means we can't use UseSerialGC as
>> the sole indicator that we're using serial.
>>
>> This patch makes sure that we always set the corresponding Use*GC for
>> the GC we have selected.
>>
>> A typical case where the VM selects serial but fails to set
>> UseSerialGC is when running a client VM without specifying a Use*GC
>> option on the command-line.
>>
>> Testing: Added a new jtreg test, passes jprt
>>
>> Webrev: http://cr.openjdk.java.net/~pliden/8068582/webrev.0/
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8068582
>
> The changes look good, but there are a couple of comments in the code
> that would be nice to clean up now that you enforce that UseSerialGC is
> properly set up:
>
> genCollectedHeap.hpp:
>
> virtual bool can_elide_initializing_store_barrier(oop new_obj) {
> // We wanted to assert that:-
> // assert(UseSerialGC || UseConcMarkSweepGC,
> // "Check can_elide_initializing_store_barrier() for this
> collector");
> // but unfortunately the flag UseSerialGC need not necessarily always
> // be set when DefNew+Tenured are being used.
> return is_in_young(new_obj);
> }
>
>
> arguments.cpp:
>
> if (UseParNewGC && !UseConcMarkSweepGC) {
> // !UseConcMarkSweepGC means that we are using serial old gc.
> Unfortunately we don't
> // set up UseSerialGC properly, so that can't be used in the check
> here.
> jio_fprintf(defaultStream::error_stream(),
> "It is not possible to combine the ParNew young collector with
> the Serial old collector.\n");
> return false;
> }
>
>
> In both these cases I think we can just remove the comments. The
> suggested assert in can_elide_initializing_store_barrier() is not
> interesting to add in my opinion since it is code in GenCollectedHeap,
> which we know is only used by Serial and CMS.
Good catch. I will remove both of these.
I'll also adjust the error message there from:
"It is not possible to combine the ParNew young collector with the
Serial old collector.
to:
"It is not possible to combine the ParNew young collector with anything
other than the CMS collector."
Because it doesn't makes sense to mention SerialOld when you say e.g.
-XX:+UseParNewGC -XX:+UseParallelOldGC
Here's an updated webrev:
http://cr.openjdk.java.net/~pliden/8068582/webrev.1/
Diff against previous webrev:
http://cr.openjdk.java.net/~pliden/8068582/webrev.1-diff/
Thanks for reviewing!
/Per
>
> Thanks,
> Bengt
>
>>
>> /Per
>
More information about the hotspot-gc-dev
mailing list