Request for review: 8007764: Wrong initialized value of max_gc_pause_sec for an instance of class AdaptiveSizePolicy
Tao Mao
tao.mao at oracle.com
Fri Feb 8 23:44:12 UTC 2013
I'm trying to answer these questions. Please see inline. Thanks.
Tao
On 2/8/13 8:17 AM, Bengt Rutisson wrote:
>
> Hi Tao,
>
> I think the change looks good and makes sense.
>
> But I have a hard time estimating the implications of this change.
>
> It seems like MaxGCMinorPauseMillis is only used by CMS and
> ParallelScavenge.
You are right. Before the fix, four occurrences below. (The one in
collectorPolicy.cpp is suspected to be wrong)
MaxGCMinorPauseMillis is introduced in different kinds of classes for
CMS and PS: ConcurrentMarkSweep*Policy* and ParalleScavenge*Heap*.
$ grep -nr "MaxGCMinorPauseMillis"
src/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp:87:
double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp:156:
double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
src/share/vm/memory/collectorPolicy.cpp:170: const double
max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
src/share/vm/runtime/globals.hpp:2043: product(uintx,
MaxGCMinorPauseMillis, max_uintx, \
> For both of those the default for MaxGCMinorPauseMillis is the same as
> MaxGCPauseMillis so it should be fine.
How did you infer that the default value for MaxGCMinorPauseMillis is
same as MaxGCPauseMillis? I didn't see such an indication in the code.
>
> But what happens if a customer is running with
> -XX:MaxGCMinorPauseMillis=1000 but not setting MaxGCPauseMillis on the
> command line? What are the implications of your change for such runs?
> I don't think it is very common. Just thinking.
For ParallelScavenge, customers should distinguish the two flags.
For CMS, I wonder whether we have fully implemented adaptive sizing
policy. Jon, can you comment on this?
In either case, customers should be able to tell apart.
>
> Also, a more common case is probably to run with only
> -XX:MaxGCPauseMillis set on the command line. How will the adaptive
> sizing behave differently compared to before?
The fix only changed the value in the routine
GenCollectorPolicy::initialize_size_policy, which is believed to be
called within
the routine of GenCollectedHeap::post_initialize(). I'm not sure whether
this routine can change sizing behaviors somewhere.
>
> Looking closer at the code it looks like CMS and ParallelScavenge are
> actually using CMSAdaptiveSizePolicy and PSAdaptiveSizePolicy
> respectively. Both of these already pass the correct value to the
> constructor of the super class AdaptiveSizePolicy. So, this bug is
> currently benign. The code that you are changing is actually not being
> used. Is this a correct conclusion?
See above. Whether the code I'm changing is being used depends upon
whether GenCollectedHeap::post_initialize() is called anywhere. But I
can't determine that right now.
Other than that, the fix should correct the bug while preserving
everything else.
>
> Thanks,
> Bengt
>
> On 2/8/13 3:42 AM, Tao Mao wrote:
>> 8007764: Wrong initialized value of max_gc_pause_sec for an instance
>> of class AdaptiveSizePolicy
>> https://jbs.oracle.com/bugs/browse/JDK-8007764
>>
>> webrev:
>> http://cr.openjdk.java.net/~tamao/8007764/webrev.00/
>>
>> changeset:
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20130208/eb92730f/attachment.htm>
More information about the hotspot-gc-dev
mailing list