Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*}
Otávio Gonçalves de Santana
otaviojava at java.net
Fri Jun 7 15:46:16 UTC 2013
I wrote a simple test.
public class BuilderTest{
public void testAppend(String name){
StringBuilder sb=new StringBuilder();
sb.append("hello").append(" World: ").append(name);
}
public void testConcat(String name){
StringBuilder sb=new StringBuilder();
sb.append("hello" +" World: "+name);
}
}
public void testAppend(java.lang.String);
Code:
Stack=2, Locals=3, Args_size=2
0: new #2; //class java/lang/StringBuilder
3: dup
4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
7: astore_2
8: aload_2
9: ldc #4; //String hello
11: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
14: ldc #6; //String World:
16: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
19: aload_1
20: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
23: pop
24: return
public void testConcat(java.lang.String);
Code:
Stack=3, Locals=3, Args_size=2
0: new #2; //class java/lang/StringBuilder
3: dup
4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
7: astore_2
8: aload_2
9: new #2; //class java/lang/StringBuilder
12: dup
13: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
16: ldc #7; //String hello World:
18: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
21: aload_1
22: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
25: invokevirtual #8; //Method
java/lang/StringBuilder.toString:()Ljava/la
ng/String;
28: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/
String;)Ljava/lang/StringBuilder;
31: pop
32: return
}
In the second method it creates a second StringBuilder with the toString()
of the first one.
I think doing this get some performance.
On Fri, Jun 7, 2013 at 11:09 AM, Tom Hawtin <tom.hawtin at oracle.com> wrote:
> On 07/06/2013 14:54, Andrew Haley wrote:
>
>> On 06/07/2013 02:18 PM, Otávio Gonçalves de Santana wrote:
>>
>
> sb.append(" xxx: [" + getXXX() + "]\n");
>>>
>>> for this:
>>>
>>> sb.append(" xxx: [").append(getXXX()).append("]**\n");
>>>
>>
>> Hmm. I wonder that a JIT can't do this automatically. Perhaps
>> it already does; I haven't looked.
>>
>
> The capacity of the StringBuilder may be different for the two statements.
> So even a "high-level rewriting" wouldn't be sufficiently equivalent.
>
> Tom
>
--
Atenciosamente.
Otávio Gonçalves de Santana
blog: http://otaviosantana.blogspot.com.br/
twitter: http://twitter.com/otaviojava
site: http://www.otaviojava.com.br
(11) 98255-3513
More information about the core-libs-dev
mailing list