On Wed, 28 Apr 2021 06:44:58 GMT, Ioi Lam <ik...@openjdk.org> wrote:

>> src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp line 557:
>> 
>>> 555:     // non-latin1, and deduplicating if we find a match.  For 
>>> deduplication we
>>> 556:     // only care if the arrays consist of the same sequence of bytes.
>>> 557:     const jchar* chars = static_cast<jchar*>(value->base(T_CHAR));
>> 
>> The encoding of the shared strings always match CompactStrings. Otherwise 
>> the CDS archive will fail to map. E.g.,
>> 
>> 
>> $ java -XX:-CompactStrings -Xshare:dump 
>> $ java -XX:+CompactStrings -Xlog:cds -version
>> ...
>> [0.032s][info][cds] UseSharedSpaces: The shared archive file's 
>> CompactStrings 
>>                     setting (disabled) does not equal the current 
>> CompactStrings setting (enabled).
>> [0.032s][info][cds] UseSharedSpaces: Unable to map shared spaces
>> ...
>> 
>> 
>> So you can avoid this `if` block when `CompactStrings == true`. The 
>> `!java_lang_String::is_latin1(found)` check below can be changed to an 
>> assert.
>> 
>> Also, I think we need an explicit test case where you'd return `true` at 
>> line 564. I can write a new test case and email to you. I think it will 
>> involve dumping an archive with `-XX:-CompactStrings`.
>
> Oh, I realized that my suggestion above is wrong. When 
> `CompactStrings==true`, you can still have a string whose coder is UTF16:
> 
> https://github.com/openjdk/jdk/blob/75a2354dc276e107d64516d20fc72bc7ef3d5f86/src/java.base/share/classes/java/lang/String.java#L343-L351

Correct.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3662

Reply via email to