You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Lance (JIRA)" <ji...@apache.org> on 2014/09/10 09:59:29 UTC

[jira] [Comment Edited] (TAP5-2332) Optimize String concatenation performance

    [ https://issues.apache.org/jira/browse/TAP5-2332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14128200#comment-14128200 ] 

Lance edited comment on TAP5-2332 at 9/10/14 7:58 AM:
------------------------------------------------------

As before, I'd be highly surprised if {{OptionModelImpl}} really makes a difference to performance unless you have thousands of select options.

I'm fine with this, but I really hope that just because you've found that {{String.format(...)}} is slower than concatenation you don't stop using it. We all know that {{String.format(...)}} is slower than StringBuilder, it has to be since it's doing more.

{{String.format(...)}} is convenient and readable and I for one won't stop using because it's a teensy bit slower. I'll only optimise once a hotspot has been found.




was (Author: uklance):
As before, I'd be highly surprised if {{OptionModelImpl}} really makes a difference to performance unless you have thousands of select options.

I'm fine with this, but I really hope that just because you've found that {{String.format(...)}} is slower than concatenation you don't stop using it. We all know that `String.format(...)` is slower than StringBuilder, it has to be since it's doing more.

{{String.format(...)}} is convenient and readable and I for one won't stop using because it's a teensy bit slower. I'll only optimise once a hotspot has been found.



> Optimize String concatenation performance
> -----------------------------------------
>
>                 Key: TAP5-2332
>                 URL: https://issues.apache.org/jira/browse/TAP5-2332
>             Project: Tapestry 5
>          Issue Type: Improvement
>            Reporter: Michael Mikhulya
>            Priority: Minor
>              Labels: patch, performance
>         Attachments: 0001-TAP5-2332-Add-a-method-for-optimized-String-concaten.patch, 0001-TAP5-2332-Replace-String.format-call-by-simple-Strin.patch, 0001-TAP5-2332-get-rid-of-String.format-usage.patch, profile-patched.png, profile-vanilla.png
>
>
> During profiling I found that String.format provides much load on CPU.
> In many cases in Tapestry String.format can be easily replaced with simple String concatenation.
> Simple JMH (http://openjdk.java.net/projects/code-tools/jmh/) test
> {code:java}
> public class FormatVsConcat {
>     private static final String format = "This is a test string with %s";
>     private static final String concat1 = "This is a test string with ";
>     private static final String concat2 = "test word";
>     @GenerateMicroBenchmark
>     public String format() {
>         return String.format(format, concat2);
>     }
>     @GenerateMicroBenchmark
>     public String concat() {
>         return concat1 + concat2;
>     }
> }
> {code}
> shows, that concatenation is 366(!) times faster.
> I removed only hot places in tapestry and get following results with apache benchmark:
> *Not patched* tapestry version:
> Requests per second: *21.38 /sec* (mean)
> Time per request: *46.764 [ms]* (mean)
> *Patched* tapestry version:
> Requests per second: *27.77 /sec* (mean)
> Time per request: *36.013 [ms]* (mean)
> So we gained 10ms per request or 20% of rendering time.
> If you don't mind I would like to get rid of String.format in all places of Tapestry and provide patch. I fixed only hot places which appeared during ab-profiling of one concrete page. So it is very likely that not all hot places were found and fixed.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)