You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexey Varlamov (JIRA)" <ji...@apache.org> on 2006/06/13 14:13:30 UTC
[jira] Commented: (HARMONY-589) [classlib][luni]
java.lang.StringBuilder performs very slowly
[ http://issues.apache.org/jira/browse/HARMONY-589?page=comments#action_12416001 ]
Alexey Varlamov commented on HARMONY-589:
-----------------------------------------
Sorry, the previous comment should read as:
Attached are 2 files:
1) j.lAbstractStringBuilder is package-private class providing shared functionality for j.l.StringBuilder & j.l.StringBuffer.
2) SB.diff contains changes needed to move j.l.StringBuilder & j.l.StringBuffer to this common base class.
Now performance results are:
----------------------------------
JIT mode:
append(String) test, ms
StringBuffer : 30
StringBuilder : 10
constructor(String) test, ms
StringBuilder : 20
StringBuffer : 20
----------------------------------
interpreter mode:
append(String) test, ms
StringBuffer : 150
StringBuilder : 131
constructor(String) test, ms
StringBuilder : 250
StringBuffer : 250
The suggested fix also eliminates code duplication between j.l.StringBuilder & j.l.StringBuffer, and absolutely syncs their behavoir up to the finest details.
> [classlib][luni] java.lang.StringBuilder performs very slowly
> -------------------------------------------------------------
>
> Key: HARMONY-589
> URL: http://issues.apache.org/jira/browse/HARMONY-589
> Project: Harmony
> Type: Improvement
> Components: Classlib
> Reporter: Alexey Varlamov
> Priority: Minor
> Attachments: AbstractStringBuilder.java, SB.diff
>
> The j.l.StringBuilder was introduced in Java 1.5 mainly as a speedup replacement to heavily synchronized j.l.StringBuffer.
> However, current implementation of StringBuilder performs 2-4 times slower than StringBuffer.
> The following simple test demonstrates this:
> public class SPTest {
> public static void main(String[] s) {
> test1();
> test2();
> }
>
> static void test1() {
> long t1 = System.currentTimeMillis();
> StringBuilder sb1 = new StringBuilder(100000);
> for(int i=0; i<10000; i++){
> sb1.append("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
> }
> long t2 = System.currentTimeMillis();
>
> StringBuffer sb2 = new StringBuffer(100000);
> for(int i=0; i<10000; i++){
> sb2.append("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
> }
> long t3 = System.currentTimeMillis();
>
> System.out.println("append(String) test, ms");
> System.out.println("\tStringBuilder : " + (t2-t1));
> System.out.println("\tStringBuffer : " + (t3-t2));
> }
>
> static void test2() {
> long t1 = System.currentTimeMillis();
> String s1 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
> for(int i=0; i<1000; i++){
> s1 = new StringBuilder(s1).append("1234567890").toString();
> }
> long t2 = System.currentTimeMillis();
> String s2 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
> for(int i=0; i<1000; i++){
> s2 = new StringBuffer(s2).append("1234567890").toString();
> }
> long t3 = System.currentTimeMillis();
> System.out.println("constructor(String) test, ms");
> System.out.println("\tStringBuilder : " + (t2-t1));
> System.out.println("\tStringBuffer : " + (t3-t2));
> }
> }
> Typical output on J9vm, interpreter mode:
> ---------------------------------
> append(String) test, ms
> StringBuilder : 221
> StringBuffer : 140
> constructor(String) test, ms
> StringBuilder : 1051
> StringBuffer : 291
> ---------------------------------
> J9vm, JIT mode:
> ---------------------------------
> append(String) test, ms
> StringBuilder : 80
> StringBuffer : 30
> constructor(String) test, ms
> StringBuilder : 130
> StringBuffer : 40
> --------------------------------
> Jrockit 1.5.0 output:
> --------------------------------
> append(String) test, ms
> StringBuilder : 10
> StringBuffer : 20
> constructor(String) test, ms
> StringBuilder : 30
> StringBuffer : 40
> Patch to fix this will follow.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira