Pages

Monday, April 18, 2011

JSF 1.2 Sun Reference Implementation eats too much memory in WebSphere Application Server



The com.sun.faces.util.LRUMap object can hold on to a lot of memory as this is used to hold the various JSF views in the session. There are two types of JSF Views stored in the session. Logical Views in session and Number of views in session: A logical view is a top level view that may have one or more actual views inside of it. This will be the case when you have a frameset, or an application that has multiple windows operating at the same time. The LOGICAL_VIEW_MAP map is an LRU Map which contains an entry for each logical view, up to the limit specified by the com.sun.faces.numberOfViewsInSession parameter. Each entry in the LOGICAL_VIEW_MAP is an LRU Map, configured with the com.sun.faces.numberOfLogicalViews parameter.

By default the number of views stored for each of these maps is 15. Therefore you can see how it could end up using a lot of memory. The value of com.sun.faces.numberOfViewsInSession and com.sun.faces.numberOfLogicalViews does not have to be "4", it can whatever you feel is adequate for your application.If either of these parameters are not in the application then it will store up to 15 view in the LRU Maps. Setting these values to something lower will result in lower memory usage by JSF.

The actual number depends on your application. Basically, if we can't find a JSF view in the session to restore we will create new one. In general, a complex application is one that would allow a user to move back and forth to pages (think something like a wizard), or an application that contains framesets or a lot of pop up windows. For example, if a pop up window is used to fill out some information and then click submit to go back to the original page... that would require storing more views in session.

But I've always found 15 to be a high number, especially if the views are large (contains quite a lot of JSF components and their state). One thing to remember is each LogicalView can contain the set number of Actual views. That is where the idea of a frameset comes in -- one logical view for the parent page, and the actual views are the different frames.

You can find more information at the following  link, starting with, "A comment on the numberOfXXX parameters."

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.