Review Request (s) - 7015169 GC Cause not always set
Tony Printezis
tony.printezis at oracle.com
Thu Feb 3 20:25:18 UTC 2011
Bengt,
Looks good.
Tony
Bengt Rutisson wrote:
>
> Ramki and Tony, thanks for your comments!
>
> Yasumasa has made the changes that you requested and I have put
> together an updated webrev:
>
> http://cr.openjdk.java.net/~brutisso/7015169/webrev.01/
>
> We discussed whether or not the asserts in
> VM_GC_Operation::doit_prologue() are really necessary now that the
> cause is always set by the contructor. We decided to leave the asserts
> in for the webrev. If anyone thinks they are unnecessary we'll remove
> them.
>
> We also found that GCCause::is_for_full_collection() in gcCause.cpp
> was dead code and removed this method as part of this change.
>
> Thanks,
> Bengt
>
>
> On 2011-01-28 21:47, Y. Srinivas Ramakrishna wrote:
>> On 1/28/2011 12:32 PM, Tony Printezis wrote:
>>> Ramki,
>>>
>>> Instead of the c'or of the base class setting the _cause field to a
>>> known value and checking later
>>> that the value has been changed, why don't we introduce a cause
>>> field on the c'or of the base class,
>>> which is then assigned to _cause, to force all subclasses to pass a
>>> value to it?
>>
>> Ah, but of course :-) (or as the American expression goes: "Doh!").
>>
>> -- ramki
>>
>>>
>>> Tony
>>>
>>> Y. Srinivas Ramakrishna wrote:
>>>> Hi Bengt --
>>>>
>>>> This looks generally good to me, but i was wondering if we could
>>>> somehow make this
>>>> less "error-prone" in the following sense. There appears to be
>>>> nothing that
>>>> forces a gc op to actually set the _gc_cause value. We rely on each
>>>> gc op
>>>> c'tor to initialize the field, and for each doit() to use a
>>>> GCCauseSetter
>>>> to export the value into the heap when it runs. It would be nice if
>>>> we could verify that each op had its _gc_cause field initialized in
>>>> the
>>>> c'tor, or at least before its doit() ran, and for one place to export
>>>> the field rather than each subclass remembering to do it. For the
>>>> former,
>>>> the only thing i can think of off the top of my head is a hack:
>>>> have the
>>>> base class with that field initialize _gc_cause to "_no_cause" in
>>>> its c'tor,
>>>> and to check in its d'tor that the value has been changed to something
>>>> different. We can't have the base class's c'tor check this
>>>> because the subclass c'tors would not have run by then.
>>>> For the latter, the only thing i could think of
>>>> feels somewhat awkward too: have the VMThread check if an STW op is a
>>>> GC op (we could introduce an attribute to check for this for any vm
>>>> op),
>>>> and do the GCCauseSetter thing in the VM thread before calling the
>>>> doit()
>>>> for each such op; may be the VMThread could at that time check that
>>>> the
>>>> cause field was not a "not set" value. Unfortunately, this kind of
>>>> leaks
>>>> these attributes and checks out of the vm op classes and so feels
>>>> awkward.
>>>> Perhaps someone might have better ideas on how that might be achieved.
>>>> (Of course such a "clean-up" could happen separately rather than
>>>> needing
>>>> to be done in this changeset.)
>>>>
>>>> Other than those very high level comments, your changes look good
>>>> to me
>>>> otherwise wrt their specifics. I did not of course check that we got
>>>> all the missing initializations which is one reason why i raised this
>>>> issue as well as to ease future changes and new gc vm ops.
>>>>
>>>> -- ramki
>>>>
>>>> On 1/27/2011 4:00 AM, Bengt Rutisson wrote:
>>>>>
>>>>> Hi Everybody,
>>>>>
>>>>> Following up on a mail discussion called "jstat LGCC column shows"
>>>>> on this mailing list. Yasumasa
>>>>> Suenaga has agreed to contribute the patch that he made to the
>>>>> OpenJDK project. I am helping him to
>>>>> get it pushed into the OpenJDK repositories.
>>>>>
>>>>> We created bug 7015169 for this issue. It is not available on
>>>>> http://bugs.sun.com yet, but I hope it
>>>>> gets published there soon.
>>>>>
>>>>> To push we need a couple of reviews. Here is the webrev:
>>>>> http://cr.openjdk.java.net/~brutisso/7015169/webrev.00/
>>>>>
>>>>> The problem was that _gc_cause was not set by all VM_GC_Operation
>>>>> that can request a GC. This was
>>>>> visible through jstat and with Yasumasa's fix the LGCC columns
>>>>> shows the correct GC cause.
>>>>>
>>>>> Thanks,
>>>>> Bengt
>>>>
>>
>
More information about the hotspot-gc-dev
mailing list