RFR(XXS) 8249087 Symbol constructor unnecessarily initializes _body[0]
David Holmes
david.holmes at oracle.com
Tue Jul 21 02:57:49 UTC 2020
Hi Ioi,
On 21/07/2020 12:50 pm, Ioi Lam wrote:
>
>
> On 7/20/20 7:36 PM, David Holmes wrote:
>> Hi Ioi,
>>
>> On 21/07/2020 10:12 am, Ioi Lam wrote:
>>> Hi please review this very simple fix:
>>>
>>> diff -r 19f26d72a8d0 src/hotspot/share/oops/symbol.cpp
>>> --- a/src/hotspot/share/oops/symbol.cpp Mon Jul 20 14:24:19 2020
>>> -0700
>>> +++ b/src/hotspot/share/oops/symbol.cpp Mon Jul 20 17:11:57 2020
>>> -0700
>>> @@ -51,8 +51,11 @@
>>> Symbol::Symbol(const u1* name, int length, int refcount) {
>>> _hash_and_refcount = pack_hash_and_refcount((short)os::random(),
>>> refcount);
>>> _length = length;
>>> - _body[0] = 0; // in case length == 0
>>> memcpy(_body, name, length);
>>> + // For symbols of length 0 and 1: _body[0] (and _body[1]) are
>>> uninitialized and may
>>
>> Can we ever have a Symbol of length zero?
>>
>> If the Symbol name is length 1 then surely _body[0] is initialized to
>> the single character of that name?
>>
>> The change seems harmless given a zero length symbol is meaningless,
>> but the commentary just confuses things to me.
>>
>
> Hi David,
>
> We can have a valid Symbol of length 0. All UTF8 constants in
> classfiles, including the literal string "", are represented as Symbols.
Ah I see.
> How about
>
> // Random, uninitialized values may appear in _body[0] and _body[1]
> // for Symbols of length 0 and 1. These random values never change during
> // the lifetime of the Symbol, and are read only by
> Symbol::identity_hash(),
What if as_quoted_ascii() were called on the zero-length symbol? That
reads _body[0] unconditionally. The same for use of base(). ??
Thanks,
David
-----
> // which would tolerate such randomness.
>
>
> Thanks
> - Ioi
>> Thanks,
>> David
>> -----
>>
>>> + // contain random values, which will only be read by
>>> Symbol::identity_hash(),
>>> + // which would tolerate such randomness. These values never change
>>> during the lifetime
>>> + // of the Symbol.
>>> }
>>>
>>>
>>> Passed hs tiers 1/2. Running tiers 3/4 now.
>>>
>>> Thanks
>>> - Ioi
>
More information about the hotspot-runtime-dev
mailing list