RFR(XS): JDK-8214272: Don't use memset to initialize arrays of MemoryUsage in memoryManager.cpp

Dmitry Chuyko dmitry.chuyko at bell-sw.com
Tue Nov 27 15:54:34 UTC 2018


On 11/27/18 6:30 PM, Roman Kennke wrote:
> Good!
>
> I'm also getting similar warnings in:
>
> output.cpp:1707
Thanks, forgot about this one. I created JDK-8214376 for that, it makes 
sense to post isolated changes even they seem trivial.
> zForwardingTable.cpp:42

My gcc is 8.2.0 and I don't get error here or I fail earlier. And you 
probably have 8.2.1. I think it also makes sense to make a separate RFE.

-Dmitry

>
> Roman
>
>> The hint is from Kim Barrett.
>>
>> Surprisingly exactly this kind of warning is not silent just in 2
>> places. I added matcher.cpp and re-submitted dev-submit tests.
>>
>> webrev: http://cr.openjdk.java.net/~dchuyko/8214272/webrev.01/
>>
>> -Dmitry
>>
>> On 11/27/18 5:39 PM, Roman Kennke wrote:
>>> Oh. Right. There is always something to learn about C++ :-) Your patch
>>> looks good then. And actually, may want to fix 'my' change too, if you
>>> feel like it. And I believe gcc8 prints more similar warnings.
>>>
>>> Thanks,
>>> Roman
>>>
>>>
>>>> Doesn't "= MemoryUsage()" actually imply "delete onstack MemoryUsage"
>>>> after copying? Probably safe here but it may be not safe in general.
>>>>
>>>> -Dmitry
>>>>
>>>> On 11/27/18 5:14 PM, Roman Kennke wrote:
>>>>> I think Aleksey's version is clearer. I used a similar approach in a
>>>>> fix
>>>>> for the same issue:
>>>>>
>>>>> http://hg.openjdk.java.net/jdk/jdk/rev/710e5a66a64e
>>>>>
>>>>> Roman
>>>>>
>>>>>
>>>>>> Placement new sets values placed in arrays. The arrays as a whole are
>>>>>> managed as before. I.e.:
>>>>>>
>>>>>> GCStatInfo::~GCStatInfo() {
>>>>>>      FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array);
>>>>>>      FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array);
>>>>>> }
>>>>>>
>>>>>> -Dmitry
>>>>>>
>>>>>> On 11/27/18 5:00 PM, Aleksey Shipilev wrote:
>>>>>>> On 11/27/18 2:51 PM, Dmitry Chuyko wrote:
>>>>>>>> rfe: https://bugs.openjdk.java.net/browse/JDK-8214272
>>>>>>>> webrev: http://cr.openjdk.java.net/~dchuyko/8214272/webrev.00/
>>>>>>> Ummmm. Aren't you leaking memory by calling "new" without "delete"?
>>>>>>>
>>>>>>> Consider this instead:
>>>>>>>
>>>>>>> diff -r a554db76b2e9 src/hotspot/share/services/memoryManager.cpp
>>>>>>> --- a/src/hotspot/share/services/memoryManager.cpp      Fri Nov 23
>>>>>>> 11:22:31 2018 +0100
>>>>>>> +++ b/src/hotspot/share/services/memoryManager.cpp      Tue Nov 27
>>>>>>> 14:56:09 2018 +0100
>>>>>>> @@ -169,7 +169,8 @@
>>>>>>>        _start_time = 0L;
>>>>>>>        _end_time = 0L;
>>>>>>> -  size_t len = _usage_array_size * sizeof(MemoryUsage);
>>>>>>> -  memset(_before_gc_usage_array, 0, len);
>>>>>>> -  memset(_after_gc_usage_array, 0, len);
>>>>>>> +  for (int i = 0; i < _usage_array_size; i++) {
>>>>>>> +    _before_gc_usage_array[i] = MemoryUsage();
>>>>>>> +    _after_gc_usage_array[i]  = MemoryUsage();
>>>>>>> +  }
>>>>>>>      }
>>>>>>>
>>>>>>> See, for example:
>>>>>>>      https://bugs.openjdk.java.net/browse/JDK-8213745
>>>>>>>
>>>>>>> -Aleksey
>>>>>>>



More information about the hotspot-gc-dev mailing list