myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gabrielle Crawford (JIRA)" <...@myfaces.apache.org>
Subject [jira] Resolved: (TRINIDAD-887) perf: USE CORRECTLY SIZED STRINGBUILDERS IN GETCLIENTID
Date Tue, 08 Jan 2008 23:58:34 GMT

     [ https://issues.apache.org/jira/browse/TRINIDAD-887?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Gabrielle Crawford resolved TRINIDAD-887.
-----------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.2.5-core
                   1.0.5-core

updated to use correctly sized stringbuilder

> perf: USE CORRECTLY SIZED STRINGBUILDERS IN GETCLIENTID
> -------------------------------------------------------
>
>                 Key: TRINIDAD-887
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-887
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>          Components: Components
>            Reporter: Gabrielle Crawford
>            Assignee: Gabrielle Crawford
>            Priority: Minor
>             Fix For: 1.0.5-core, 1.2.5-core
>
>
> Explicitly create properly sized stringbuilder in getClientId for perf reasons. Here's
an analysis from a colleague at Oracle:
> The Jdev memory profiler reported that after warming up the JVM, each request
> of the page from a new browser resulted in about 2.3MB of memory allocated.
> About 12% (270K out of total 2324K) of the memory allocated came from the
> call org.apache.myfaces.trinidad.component.UIXComponentBase.getClientId.
> The code currently does String concatenation, which resulted in an internal StringBuilder
with default length being created:
>         clientId = (containerComponent.getContainerClientId(context) +
>                     NamingContainer.SEPARATOR_CHAR +
>                     clientId);
> The default length is not large enough, so the StringBuilder has to expand, causing additional
memory allocation.
> This could be avoided by using a properly-sized StringBuilder:
>         String cont = containerComponent.getContainerClientId(context);
>         StringBuilder bld = new StringBuilder(cont.length() + 1 +
> clientId.length());
>         clientId =
> bld.append(cont).append(NamingContainer.SEPARATOR_CHAR).append(clientId).toStr
> ing();
> The code in
> org.apache.myfaces.trindad.component.UIXCollection.getContainerClientId has a
> similar problem:
>     if (key != null)
>     {
>       id += NamingContainer.SEPARATOR_CHAR + key;
>     }
> A better way to do this would be:
>     if (key != null)
>     {
>       StringBuilder bld = new StringBuilder(id.length() + 1 + key.length());       id
=
> bld.append(id).append(NamingContainer.SEPARATOR_CHAR).append(key).toString();
>     }
> I tested with the about fix and memory allocated for these two methods
> reduced from 270K to 173K, a saving of about 4.2% of total. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message