[ 
https://issues.apache.org/jira/browse/WW-3457?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12877332#action_12877332
 ] 

Jed Wesley-Smith commented on WW-3457:
--------------------------------------

> Did you profile that ... ?

Yes, we saw this as one of the major causes of blocking in multi-threaded and a 
significant hotspot in the single-threaded profiled runs.

> Solved, thanks!

Awesome!

> Significant performance improvement for freemarker TagModel
> -----------------------------------------------------------
>
>                 Key: WW-3457
>                 URL: https://issues.apache.org/jira/browse/WW-3457
>             Project: Struts 2
>          Issue Type: Improvement
>    Affects Versions: 2.0.0
>            Reporter: Jed Wesley-Smith
>            Assignee: Lukasz Lenart
>             Fix For: 2.2.0
>
>
> The class org.apache.struts2.views.freemarker.tags.TagModel creates a new 
> freemarker.template.DefaultObjectWrapper for each call to 
> unwrapParameters(Map). The problem is that that class is quite expensive to 
> construct as the super-class does a quite bit of introspection to fill up its 
> caches. Not only is this a lot of work, it tends to hit the Introspector 
> class pretty hard, which internally does a lot of sychronising. In our soak 
> performance tests this was a significant cause of blocking in our application.
> The DefaultObjectWrapper (or more properly the 
> freemarker.ext.beans.BeansWrapper class as that is actually all the TagModel 
> is using) is actually meant to be a cache that prevents exactly this kind of 
> slowness, so constructing a new one every time is counter-productive.
> I don't have the latest source handy so I can't provide a patch, but the 
> change is to simply replace the line:
>       DefaultObjectWrapper objectWrapper = new DefaultObjectWrapper();
> with:
>         BeansWrapper objectWrapper = BeansWrapper.getDefaultInstance();
> in the second line of TagModel.unwrapParameters(Map params)

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

Reply via email to