Good point, Thanks a lot. 

Shall we improve the str fn in the core lib? From my point of view, the 
core fns should be performance sensitive.



On Sunday, March 2, 2014 12:03:21 AM UTC+8, Shantanu Kumar wrote:
>
>
>
> On Saturday, 1 March 2014 15:32:41 UTC+5:30, bob wrote:
>>
>> Case :
>>
>> clojure verison:
>>
>> (time (dotimes [n 10000000] (str n "another word"))) ;; take about 
>> 5000msec
>>
>> java version
>>
>>         long time = System.nanoTime();
>>
>>         for(int i=0 ; i<10000000 ;i++){
>>             String a=i+"another word";
>>         }
>>       System.out.println(System.nanoTime()-time); 
>>      
>>
>> The java version take about 500 msecs, I thought it might be caused by 
>> the str implementation which is using string builder, and it might not be 
>> the best choice in the case of no much string to concat, and then I replace 
>> "another word" with 5 long strings as the parameter, however no surprise.
>>
>> I just wonder what make the difference, or how to find the difference.
>>
>
> Others have added useful points to this thread. Java string concatenation 
> internally uses StringBuilder, so if you replace (str n "another word") 
> with the following:
>
> (let [sb (StringBuilder.)]
>          (.append sb n)
>          (.append sb "another word")
>          (.toString sb))
>
> ..then the perf improves 1/4 to 1/3. Further, with the following tweak:
>
> (let [sb (StringBuilder. 20)]  ; because StringBuilder allocates only 16 
> chars by default on Oracle JRE
>          (.append sb n)
>          (.append sb "another word")
>          (.toString sb))
>
> ..the perf improves from 1/3 to less than 1/2. Here we simply avoid double 
> allocation in StringBuilder.
>
> Other things I made sure were:
>
> 1. I used Criterium to measure
> 2. I used `-server` option
> 3. Made sure reflection warning was on
>
> Shantanu
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to