You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Volker Malzahn (JIRA)" <de...@myfaces.apache.org> on 2013/12/13 18:45:07 UTC
[jira] [Created] (TRINIDAD-2434) Usage of Class.getMethod in
TreeRenderer.retrieveGetNodeTypeMethod is a critical performance issue
Volker Malzahn created TRINIDAD-2434:
----------------------------------------
Summary: Usage of Class.getMethod in TreeRenderer.retrieveGetNodeTypeMethod is a critical performance issue
Key: TRINIDAD-2434
URL: https://issues.apache.org/jira/browse/TRINIDAD-2434
Project: MyFaces Trinidad
Issue Type: Bug
Components: Components, Facelets
Affects Versions: 2.0.1-core
Environment: WebSphere, IBM JRE.
Reporter: Volker Malzahn
Priority: Critical
We have a webapp with SWF 2.3.0, JSF 2.1 and Trinidad 2.0.1 and have done performance tests in an environment with WebSphere and IBM JRE. When we reached a number of concurrent users of around 80 we get hot spots in calls of Class.getMethod. The stack trace contains following Trinidad method which perform this call often:
org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.TreeRenderer.getNodeType(UIXHierarchy)
Inspecting the source of this method I detected that it calls rowClass.getMethod("getNodeType") every time it's called - without caching the method handles reached in previous calls.
After doing a quick fix for this by caching the method handles we have solved this hot spot:
private final Map<Class<?>, Method> getNodeTypeMethodMap = new HashMap<Class<?>, Method>();
private Method retrieveGetNodeTypeMethod(Class rowClass) {
try {
synchronized (getNodeTypeMethodMap) {
if (getNodeTypeMethodMap.containsKey(rowClass)) {
return getNodeTypeMethodMap.get(rowClass);
}
Method getNodeTypeMethod = rowClass.getMethod("getNodeType");
getNodeTypeMethodMap.put(rowClass, getNodeTypeMethod);
return getNodeTypeMethod;
}
} catch (Exception e) { return null; }
}
Could you please fix this for the next Trinidad release?
--
This message was sent by Atlassian JIRA
(v6.1.4#6159)