String concatenation tweaks

Peter Levart peter.levart at gmail.com
Sun May 31 20:58:38 UTC 2015



On 05/28/2015 11:22 PM, Aleksey Shipilev wrote:
> On 05/26/2015 04:31 PM, Remi Forax wrote:
>> On 05/25/2015 09:01 PM, Aleksey Shipilev wrote:
>>> The performance is interesting. It seems to break OptimizeStringConcat,
>>> and so it's a performance win only on non-optimized chains, like
>>> string_string_long. The allocation pressure is slightly higher as well,
>>> seems to be because int[] from the collector is not scalarized.
>> I wonder if the two things are not related, fail to unroll -> creation
>> of int[] -> non constant value for the StringBuilder constructor ->
>> break of OptimizeStringConcat optimization.
> Merged:
>    http://cr.openjdk.java.net/~shade/scratch/string-concat-indy/
>
> It seems OptimizeStringConcat expects a particular C2 IR graph shape,
> and it might be hard to reproduce on MHs. Anyhow, your new FULL_MH now
> performs the same as INNER_SIZED when OptimizeStringConcat fails, both
> throughput-performance- and allocation-wise on small count of int arguments.
>
> Please note I added a simple regression test, and munged the code to
> make it pass. StringBuilder::append overloads are not present for every
> type, and also we need to bypass StringBuffers/CharSequences.
>
> It would seem INNER_SIZED is a good strategy to default to, and
> subsequent JDK improvements can be done after the infrastructure lands.
> The whole point for this change is to open the door for these
> improvements. Meanwhile, I put together a very rough JEP draft here, and
> I would appreciate comments and corrections:
>   http://cr.openjdk.java.net/~shade/scratch/string-concat-indy/jep.txt
>
> Thanks,
> -Aleksey

Hi,

This is a noble goal. I will just warn you about the possible 
initialization problems. String concatenation is a very rudimentary 
operation and might be used very early in the startup of the JVM. If it 
is used before the system class loader is initialized (before the main 
method is executed), you will be faced with the following issue at least:

http://mail.openjdk.java.net/pipermail/mlvm-dev/2015-March/006386.html

...so we might need to fix these early java.lang.invoke initialization 
problems 1st.

Regards, Peter

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150531/18a15c65/attachment-0001.html>


More information about the compiler-dev mailing list