RFR(XXS) 8249087 Symbol constructor unnecessarily initializes _body[0]
Ioi Lam
ioi.lam at oracle.com
Tue Jul 21 02:50:49 UTC 2020
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.
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(),
// 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