Questions on bug JDK-8061611 "Remove deprecated command line flags"

Derek White derek.white at oracle.com
Mon Nov 10 22:43:47 UTC 2014


I'm tackling a "starter bug" JDK-8061611 
<https://bugs.openjdk.java.net/browse/JDK-8061611> " Remove deprecated 
command line flags" that sounds like it should be pretty trivial, but 
some part of this reveal some unexpectedly twisted behavior. I guess 
that makes it the perfect starter GC bug :-)

One of the command line flags to remove is 
-XX:CMSParPromoteBlocksToClaim. It has been deprecated for a while. 
Using it prints the message
     "Please use -XX:OldPLABSize in place of 
-XX:CMSParPromoteBlocksToClaim in the future"

Two little twists:
1) The variable CMSParPromoteBlocksToClaim is still used separately from 
OldPLABSize when initializing the "_blocks_to_claim" array in 
compactibleFreeListSpace.cpp. It looks like it uses it when calculating 
the initial averages for AdaptiveWeightedAverage. Is it important to 
retain the ability to set the variable CMSParPromoteBlocksToClaim 
separately from OldPLABSize? And see last question***.

2) In the CMS case, there is code that attempts to synchronize the 
OldPLABSize and CMSParPromoteBlocksToClaim variables in 
Arguments::set_cms_and_parnew_gc_flags(). If OldPLABSize is set (via 
command line or ergo), then CMSParPromoteBlocksToClaim is set to the 
same value unless it is already set too. Then in any case OldPLABSize is 
set to CMSParPromoteBlocksToClaim.

But note the default values:

    OldPLABSize = 1024
    CMSParPromoteBlocksToClaim = 16

So if both OldPLABSize and CMSParPromoteBlocksToClaim were left at 
default values, then OldPLABSize just got set to 16, which seems way too 
small to be useful. Not only is the OldPLABSize default 1024, but in 
set_parnew_gc_flags() we just reset the value to 1024 (again). So this 
seems pretty intentional, and setting to 16 seems accidental.This sounds 
bad???

$  java -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -version | grep 
OldPLABSize
     uintx OldPLABSize                              := 16              
{product}

In fact, I don't see why the "Size of old gen promotion LAB's (in 
HeapWords)" should be equal to "Number of blocks to attempt to claim 
when refilling CMS LAB". *** Aren't these different units?

Thanks for any thoughts,

- Derek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20141110/03fbbbfc/attachment.htm>


More information about the hotspot-gc-dev mailing list