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