<Swing Dev> Replace concat String to append in StringBuilder parameters
Xuelei Fan
xuelei.fan at oracle.com
Tue Aug 26 09:11:29 UTC 2014
Pavel, thanks for the checking and confirm.
Look back to the benchmark code:
private StringBuilder createBuilder(String... values) {
StringBuilder text = new StringBuilder();
text.append(values[0]).append(values[1])
.append(values[2]).append(values[3])
.append(values[4]).append(values[5]);
return text;
}
private StringBuilder createBuilderWithConcat(String... values) {
StringBuilder text = new StringBuilder();
text.append(values[0] + values[1])
.append(values[2] + values[3])
.append(values[4]+ values[5]);
return text;
}
Comparing to createBuilder, the code similar to (values[0] + values[1])
in createBuilderWithConcat may take additional memory and CPU cycles to
create new StringBuffer objects. As may be able to explain the benchmark
result.
Therefore, I think it might not be necessary to make this change
(replacing string "+" operator with StringBuilder append()).
Xuelei
On 8/26/2014 4:41 PM, Pavel Rappo wrote:
> It's exactly the way it's been working since 1.6 I believe.
>
> <source>
>
> public class Optimization {
>
> public String concat(String... strings) {
> return "#: " + strings[0] + strings[2] + strings[3] + "...";
> }
> }
>
> <compiled into>
>
> public class Optimization {
> public Optimization();
> Code:
> 0: aload_0
> 1: invokespecial #1 // Method java/lang/Object."<init>":()V
> 4: return
>
> public java.lang.String concat(java.lang.String...);
> Code:
> 0: new #2 // class java/lang/StringBuilder
> 3: dup
> 4: invokespecial #3 // Method java/lang/StringBuilder."<init>":()V
> 7: ldc #4 // String #:
> 9: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 12: aload_1
> 13: iconst_0
> 14: aaload
> 15: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 18: aload_1
> 19: iconst_2
> 20: aaload
> 21: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 24: aload_1
> 25: iconst_3
> 26: aaload
> 27: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 30: ldc #6 // String ...
> 32: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 35: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
> 38: areturn
> }
>
> -Pavel
>
> On 26 Aug 2014, at 06:20, Xuelei Fan <xuelei.fan at oracle.com> wrote:
>
>> I was wondering, is it nice to address it in Java compiler to use string
>> builder for the string "+" operator?
>>
>> Xuelei
>>
>>
>> On 8/26/2014 11:28 AM, Wang Weijun wrote:
>>> New webrevs available at
>>>
>>> http://cr.openjdk.java.net/~weijun/8055723/client/webrev.01/
>>> http://cr.openjdk.java.net/~weijun/8055723/core/webrev.01/
>>>
>>> There are only 2 now. Everything non-client is in core.
>>>
>>> Everyone, please do code review quickly because the patch touches too many files and any delay could mean re-merge.
>>>
>>> *Otávio*: If there is only small change in feedback, tell me to update my own repo and you don't need to generate the big patch again.
>>>
>>> I see you still include that demo file.
>>>
>>> Thanks
>>> Max
>>>
>>>
>>
>
More information about the swing-dev
mailing list