Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*} (original) (raw)
Otávio Gonçalves de Santana otaviojava at java.net
Fri Jun 7 15:46:16 UTC 2013
- Previous message: Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*}
- Next message: Re: Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*}
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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."":()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."":()V
7: astore_2
8: aload_2
9: new #2; //class java/lang/StringBuilder
12: dup
13: invokespecial #3; //Method java/lang/StringBuilder."":()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
- Previous message: Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*}
- Next message: Re: Inefficient use StringBuffer or StringBuilder[Optimization|clean-up] {Package: con.sun. * java.lang*}
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]