Using StringBuilder instead StringBuffer[JAXP]

Otávio Gonçalves de Santana otaviojava at java.net
Tue Dec 23 09:46:40 UTC 2014


*Motivation:* StringBuffer is synchronized while StringBuilder is not which
makes StringBuilder faster than StringBuffer[1]. The strategy was removed
the StringBuffer when it is not necessary.


WebRev:
https://dl.dropboxusercontent.com/u/16109193/open_jdk/jaxp/buffer2builder/index.html


[1]

@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.SECONDS)
public class StringBufferBenchmark {


    private List<String> texts;
    @Param("10000000")
    private int param;

    @Setup
    public void setup() {
        texts = new LinkedList<>();
        Random random = new Random();
        for (int index = 0; index < param; index++) {
            char a = (char) random.nextInt();
            texts.add(String.valueOf(a));
        }
    }

    @GenerateMicroBenchmark
    public void stringBuffer(BlackHole bh) {
        StringBuffer sb = new StringBuffer();
        texts.stream().forEach(sb::append);
        bh.consume(sb.toString());
    }

    @GenerateMicroBenchmark
    public void stringBuilder(BlackHole bh) {
        StringBuilder sb = new StringBuilder();
        texts.stream().forEach(sb::append);
        bh.consume(sb.toString());
    }
 }


java -jar target/microbenchmarks.jar ".*StringBufferBenchmark*." -wi 20 -i
20 -f 1

Benchmark                                (param)   Mode   Samples
Mean   Mean error    Units
m.StringBufferBenchmark.stringBuffer    10000000  thrpt        20
 3.208        0.406    ops/s
m.StringBufferBenchmark.stringBuilder   10000000  thrpt        20
 4.795        0.037    ops/s
-- 

Otávio Gonçalves de Santana

twitter: http://twitter.com/otaviojava
site:     *http://about.me/otaviojava <http://about.me/otaviojava>*
55 (11) 98255-3513
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 814_updated.patch
Type: text/x-patch
Size: 195975 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20141223/88127a46/814_updated.patch>


More information about the core-libs-dev mailing list