Re: 回复:Propose to remove support for CompactStrings off

Stuart Marks stuart.marks at oracle.com
Thu Nov 6 18:48:51 UTC 2025


Hi wenshao,

I've written up a draft JEP for deprecating the disabling of Compact Strings. There 
hasn't been a good term for running the system with Compact Strings disabled, so I 
made up a term "UTF-16-only" and used it here.

https://openjdk.org/jeps/8371379

I also filed an enhancement to cover the change to add a warning message when 
-XX:-CompactStrings is used, and I've assigned it to you (wenshao). Not that this 
change can't be integrated until the JEP is moved into the Targeted state.

https://bugs.openjdk.org/browse/JDK-8371431

You might want to associate PR 27995 with this bug report.

s'marks

On 11/3/25 10:04 PM, Stuart Marks wrote:
>
> Hi wenshao,
>
> I think removing Compact Strings is a great idea! As you noted in your first 
> message, removing it would make String easier to maintain. Just so that everybody 
> here understands the issues, every string algorithm has THREE implementations:
>
> 1. compact strings enabled, using ISO Latin 1 coder
>
> 2. compact strings enabled, using UTF-16 coder
>
> 3. compact strings disabled
>
> In recent years I suspect our test coverage of the compact-strings disabled case 
> is lacking, as some bugs have occurred in only that case. For example, see 
> JDK-8321514 <https://bugs.openjdk.org/browse/JDK-8321514>, JDK-8316879 
> <https://bugs.openjdk.org/browse/JDK-8316879>, JDK-8360271 
> <https://bugs.openjdk.org/browse/JDK-8360271>, JDK-8360255 
> <https://bugs.openjdk.org/browse/JDK-8360255>, JDK-8221430 
> <https://bugs.openjdk.org/browse/JDK-8221430>, etc. (Some of these have been 
> fixed, but some are still open.)
>
> As Alan noted, however, we can't simply remove this case. We also can't simply 
> deprecate the command-line option; we need to deprecate the feature of running 
> without Compact Strings before we can remove that feature.
>
> Compact Strings were introduced with JEP 254 <https://openjdk.org/jeps/254>. The 
> JEP doesn't mention that there is an option to disable compact strings, but the 
> JVM Guide 
> <https://docs.oracle.com/en/java/javase/25/vm/java-hotspot-virtual-machine-performance-enhancements.html#GUID-D2E3DC58-D18B-4A6C-8167-4A1DFB4888E4> 
> describes the Compact Strings feature and also the ability to disable it using the 
> -XX:-CompactStrings command line option. This section doesn't say much about when 
> you might want to disable the feature, though; it merely says "This feature can be 
> disabled if you observe performance regression issues in an application." Articles 
> like this one from Baeldung <https://www.baeldung.com/java-9-compact-string>, and 
> vendor documentation from IBM 
> <https://www.ibm.com/docs/en/sdk-java-technology/8?topic=options-xx-compactstrings> 
> also document this option, but they offer similarly vague advice.
>
> Since the option is fairly well-known, it's not merely a matter of looking at the 
> status of the various ports (though those are significant, of course). It could be 
> that some installations out there running with option to disable compact strings, 
> perhaps if they encountered a performance regression, or for other reasons. 
> They'll need to be informed that the feature is going away, and the best way to do 
> that is with a JEP.
>
> There are some additional issues to consider as well.
>
>   * As Alan noted,  the ARM32 port has compact strings disabled by default. It's
>     not clear whether it even works if compact strings are enabled.
>   * Compact strings increases storage requirements of CJK character data. Our
>     /assumption/ has been that even CJK-heavy applications use a lot of ASCII data
>     for config files, message headers, JSON, etc., and that compact strings are
>     still a net win for such applications. However, that's an assumption. There's
>     the possibility that some installation run those applications with compact
>     strings disabled.
>   * The JNI GetStringCritical call returns a direct pointer in the non compact
>     strings case but makes a copy when compact strings are enabled. Some
>     applications may suffer regressions because of this; see this Stack Overflow
>     <https://stackoverflow.com/questions/76913323/string-compact-has-introduced-some-performance-issues-for-the-current-jni-how>
>     question.
>
> There are probably some other issues we haven't considered yet. The best way to 
> flush them out is to post a JEP, and then use other channels to publicize the JEP. 
> The JEP is mostly a formality about changing the official status of running in the 
> compact-strings-disabled mode to "deprecated". Even though it seems like a lot of 
> overhead to write a JEP for this, the fact is that many people in the tech press 
> look only at the list of JEPs for each release and not much else. Any many Java 
> users look only at tech publications to keep up with Java; they don't look at 
> GitHub or follow the OpenJDK mailing lists. Thus, posting a JEP is the best chance 
> we have to reach a broad set of Java users, some of whom might be affected by this 
> change.
>
> Actual changes that go along with the deprecation will probably only involve 
> adding warning messages and possibly updating documentation. We don't need to 
> resolve issues like the ARM32 port yet. However, that will need to be resolved 
> before we actually remove the feature.
>
> Since I'm "Dr Deprecator" I'll volunteer to draft the JEP.
>
> s'marks
>
>
> On 10/27/25 11:56 PM, Alan Bateman wrote:
>> On 28/10/2025 06:32, wenshao wrote:
>>>
>>> Thanks to Alan for your feedback.
>>>
>>> Based on Chen Liang's suggestion, I submitted a new draft PR 
>>> https://github.com/openjdk/jdk/pull/27995 
>>> <https://urldefense.com/v3/__https://github.com/openjdk/jdk/pull/27995__;!!ACWV5N9M2RV99hQ!OKe3zURFdlME6esFh_Travsoq4L0s3h71P8bsjCEG5RrmA0nzVmARS7ZAmOZEL0-DWdIg9P8orcXs26SZtYD-c8ZB8h_Fg$> 
>>> to add a warning message to the ComactStrings option.
>>
>> I think  first step has to be establish what or who might be using 
>> -XX:-CompactStrings in 2025. This means looking into the status of ports. Andrew 
>> Haley is going to check with folks in IBM as some of the bug reports for the 
>> -CompactString code paths come from ports there.
>>
>> -Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20251106/ebf6e9ee/attachment-0001.htm>


More information about the core-libs-dev mailing list