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....@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
>>>
>>>
>>
> 

Reply via email to