Optimization 2.0 for composing strings - Was: Replace concat String to append in StringBuilder parameters
Ivan Gerasimov
ivan.gerasimov at oracle.com
Sat Aug 30 08:36:48 UTC 2014
It may be worth to compare the performance of alternative
implementations with -XX:+OptimizeStringConcat option turned on.
Sincerely yours,
Ivan
On 30.08.2014 0:53, Ulf Zibis wrote:
> Hi compiler people,
>
> is there some chance that javac could be enhanced to optimize better
> as discussed in this thread? Than refactoring of up to now better
> readable code to ugly StringBuilder at append() code would be superfluous.
> I really like the String concatenation syntax, but unfortunately it
> often causes slower code and bigger footprint.
> Optimally javac would optimize mixed use of StringBuilder,
> StringJoiner, concatenation, toString(), append(String),
> append(Collection) etc. to a single StringBuilder instance, so that
> the resulting code, JITed or not, will have better performance.
> Additionally javac could guess a reasonable initial capacity from the
> given source code.
>
>
> Am 29.08.2014 um 10:01 schrieb Wang Weijun:
>> So it's not that the optimization fails but there is no optimization
>> on them yet.
>>
>> I do see the .append("x") case will be easy to deal with, but it
>> looks like historically javac has not been a place to do many
>> optimizations. It mostly converts the java source to byte codes in a
>> 1-to-1 mapping and let VM do whatever it wants (to optimize). When
>> you talked about compiling multiple concatenation into using a single
>> StringBuilder, it's more like choosing the correct implementation
>> rather than an optimization.
>>
>> I don't expect to see big change on this in the near future, so shall
>> we go on with the current enhancement?
>>
>> Thanks
>> Max
>>
>> On Aug 29, 2014, at 2:17, Ulf Zibis <Ulf.Zibis at CoSoCo.de> wrote:
>>
>>> I mean:
>>> It does not output byte code that only uses a single char array to
>>> compose the entire String in question.
>>> With "optimization fails", I also mean, there is used an additional
>>> "StringComposer" e.g. another StringBuilder or a StringJoiner in
>>> addition to the 1st StringBuilder.
>>>
>>> -Ulf
>>>
>>> Am 27.08.2014 um 14:02 schrieb Pavel Rappo:
>>>> Could you please explain what you mean by "javac optimization
>>>> fails" here?
>>>>
>>>> -Pavel
>>>>
>>>> On 27 Aug 2014, at 10:41, Ulf Zibis <Ulf.Zibis at CoSoCo.de> wrote:
>>>>
>>>>> 4.) Now we see, that javac optimization fails again if
>>>>> StringBuilder, concatenation, toString(), append(String),
>>>>> append(Collection) etc. and StringJoiner use is mixed.
>>
>
>
>
More information about the compiler-dev
mailing list