RFR 8078555(M): GC: implement ranges (optionally constraints) for those flags that have them missing

Kim Barrett kim.barrett at oracle.com
Mon Aug 24 17:51:38 UTC 2015


On Aug 24, 2015, at 11:36 AM, sangheon.kim <sangheon.kim at oracle.com> wrote:
> 
> Hi Kim,
> 
> On 08/21/2015 02:34 PM, Kim Barrett wrote:
>> Comments below are for:
>> 
>> http://cr.openjdk.java.net/~sangheki/8078555/webrev.01/
>> http://cr.openjdk.java.net/~sangheki/8078555/webrev.01_to_00/
>> 
>> No additional comments for:
>> 
>> http://cr.openjdk.java.net/~sangheki/8078555/webrev.02/
>> http://cr.openjdk.java.net/~sangheki/8078555/webrev.02_to_01
>> 
>> ------------------------------------------------------------------------------
>> src/share/vm/runtime/commandLineFlagConstraintsGC.cpp
>> 
>> General comment - all the conditionalizations on INCLUDE_ALL_GCS
>> seriously uglifies this code.  We should be conditionalizing for that,
>> but I wonder if there's a better way.  Most of the conditionalizations
>> are for effectively the entire constraint function.  Rather than that,
>> could we arrange for the relevant constraint functions to be
>> unreferenced when not needed, and then just have a block
>> conditionalization around the whole set of functions?  One way to do
>> this might be to add a NOT_INCLUDE_ALL_GCS macro and wrap the
>> "constraint(...)" forms with that new macro where appropriate.
>> 
>> This probably should be addressed under a separate RFE though.
>> 
>> If I'd realized how ugly it would make the code, I probably wouldn't
>> have suggested doing the conditionalization now.  But now that it's
>> here, I'm not sure its worth backing out.
> I agree with you.
> How about leave as is and handle from a separate RFE?

OK.

> 
>> 
>> ------------------------------------------------------------------------------
>> src/share/vm/runtime/commandLineFlagConstraintsGC.cpp
>>   63 Flag::Error ParallelGCThreadsConstraintFunc(uint value, bool verbose) {
>> [removed the following]
>>   71   // G1, CMS and Parallel GC modes disallows ParallelGCThreads=0
>>   72   if ((UseG1GC || UseConcMarkSweepGC || UseParallelGC) && (value == 0)) {
>>   73     CommandLineError::print(verbose, "ParallelGCThreads cannot be zero\n");
>>   74     return Flag::VIOLATES_CONSTRAINT;
>>   75   }
>> 
>> Why was this removed?
> Disallowing ParallelGCThreads=0 is already checked before constraint check.
> (By Arguments::set_parnew_gc_flags(), set_parallel_gc_flags() and set_g1_gc_flags() )

Ah, missed that.  OK.

> 
>> 
>> ------------------------------------------------------------------------------
>> src/share/vm/runtime/commandLineFlagConstraintsGC.cpp
>> #if INCLUDE_ALL_GCS
>>  271 Flag::Error G1RSetRegionEntriesConstraintFunc(intx value, bool verbose) {
>>  287 Flag::Error G1RSetSparseRegionEntriesConstraintFunc(intx value, bool verbose) {
>>  303 Flag::Error G1YoungSurvRateNumRegionsSummaryConstraintFunc(intx value, bool verbose) {
>>  317 Flag::Error G1HeapRegionSizeConstraintFunc(size_t value, bool verbose) {
>>  332 Flag::Error G1NewSizePercentConstraintFunc(uintx value, bool verbose) {
>>  346 Flag::Error G1MaxNewSizePercentConstraintFunc(uintx value, bool verbose) {
>> #endif
>> 
>> [pre-existing]
>> 
>> Shouldn't these G1-specific constraint functions (whose options are
>> declared in g1_globals.hpp) be declared and defined in G1-specific
>> files?
>> 
>> This should be handled as a separate issue.
> I'm not sure whether is it worth or not.
> But as I don't have a strong opinion on this, let me add this at follow-up issue.

OK.

> 
>> 
>> ------------------------------------------------------------------------------
>> src/share/vm/runtime/globals.hpp
>> 1857   product(size_t, MarkStackSize, NOT_LP64(32*K) LP64_ONLY(4*M),             \
>> 1858           "Size of marking stack")                                          \
>> 1859           range(0, MarkStackSizeMax)                                        \
>> 
>> I raised an issue here previously, and re-ordering the declarations in
>> the macros doesn't address the problem.
>> 
>> The value of MarkStackSizeMax will be read at the time of the call to
>> CommandLineFlagRangeList::init().  This is prior to any command line
>> option processing for a value for MarkStackSizeMax.  So the range
>> won't reflect command line options.
>> 
>> Option values cannot be used in the computation of ranges.
>> Dependencies between options need to be handled via constraint
>> functions.
> You are right.
> I should think carefully when you left a comment before.
> Fixed.

Good.

> 
> Let me send a webrev after hearing your opinion.

OK.



More information about the hotspot-dev mailing list