RFR (S): JDK-8027440: DefNew does not log heap change information when a promotion failure occurs

Bengt Rutisson bengt.rutisson at oracle.com
Tue Nov 5 09:32:23 UTC 2013


Hi Tao,

On 2013-11-05 00:50, Tao Mao wrote:
> looks good in general.
>
> Could you make the regex pattern check more verbose?
>
> say,
>
> - Matcher stdoutMatcher = Pattern.compile("\\[GC .Allocation 
> Failure.*K->.*K., .* secs\\]", Pattern.MULTILINE).matcher(stdout);
> + Matcher stdoutMatcher = Pattern.compile("\\[GC .Allocation 
> Failure.*K->.*K\\(.*K\\), .* secs\\]", 
> Pattern.MULTILINE).matcher(stdout);

Good point. I updated the test to use your regexp pattern.

Thanks for the review!

Bengt

>
>
> On 11/1/13 2:03 PM, Bengt Rutisson wrote:
>>
>> Hi Tao,
>>
>> On 11/1/13 6:53 PM, Tao Mao wrote:
>>> Hi Bengt,
>>>
>>> Thank you for looking at this.
>>>
>>> Can you explain why, in this particular case, the used heap size got 
>>> larger after GC?
>>
>> It is because of the way the used value is calculated. The used value 
>> for the DefNew generation is implemented as:
>>
>> size_t DefNewGeneration::used() const {
>>   return eden()->used()
>>        + from()->used();      // to() is only used during scavenge
>> }
>>
>> Where, for both eden and from, used() is implemented as:
>>
>>   size_t used() const            { return byte_size(bottom(), top());
>>
>> Since we got a promotion failure the top value is not reset. There 
>> are still objects in the eden and from spaces. This means that the 
>> used value after the GC is whatever we managed to promote plus the 
>> full young gen (except the to space). This is more than the used 
>> before the GC, since that was just what was already in the old gen 
>> plus the full young gen.
>>
>> This is the same behavior as with the other collectors.
>>
>> Thanks,
>> Bengt
>>
>>>
>>> Thanks.
>>> Tao
>>>
>>> On 11/1/13 8:50 AM, Bengt Rutisson wrote:
>>>>
>>>> Hi all,
>>>>
>>>> Can I have a couple of reviews for this small change?
>>>>
>>>> http://cr.openjdk.java.net/~brutisso/8027440/webrev.00/
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8027440
>>>>
>>>> DefNew was not printing the heap change information when a 
>>>> promotion failure occured. Before this change the logging for a 
>>>> DefNew collection that got promotion failure looked like this:
>>>>
>>>> [GC (Allocation Failure) , 0.0543440 secs]
>>>>
>>>> After my change it looks like:
>>>>
>>>> [GC (Allocation Failure)  81920K->120831K(120832K), 0.0620180 secs]
>>>>
>>>> Thanks,
>>>> Bengt
>>




More information about the hotspot-gc-dev mailing list