Hi Hani I just let my application run with WW1.4 (CVS 3 feb 04) and the problem is exact the same as in WW1.3 with one difference that not only Query and QuerySegment grow when using the table tag but now also webwork.util.ConcurrentReaderHashMap$Entry grows with the same amount.
BTW: since I'm into profiling: I saw that ValueStack$MethodInfo came in in WW1.4. It's a big (!) memory holder which never gets GC'ed... Overall it seems to me that WW1.4 uses a lot more memory than 1.3... see attached reports: both are after GC and using the application the same. Cheers -Paolo > -----Original Message----- > From: Hani Suleiman [mailto:[EMAIL PROTECTED] > Sent: Thursday, February 05, 2004 6:43 PM > To: [EMAIL PROTECTED] > Subject: Re: [OS-webwork] WW1.3 Memory Consumption > > > Hi Paolo, > > I just tested this and I don't see the behaviour you describe in the > current CVS. Can you try webwork 1.4 and see if you still have the > leak? > > On Feb 5, 2004, at 11:05 AM, Vedovato Paolo wrote: > > > Ok, I Found some more on this issue. > > > > This Query problems occur only when the <ww:table> tag is used. > > > > As far as i see in my Profiling Tool the WebTable component > > tries to do something 'illegal' in the doEndTag. > > > > It always tries to find something in this form > > > > [EMAIL PROTECTED] > > > > and of course this reference changes on each request putting > > it in the Query Hashtable and so this grows with each > > request. > > > > Any clues about this phenomena? > > > > Cheers > > -Paolo > > > > > >> -----Original Message----- > >> From: Vedovato Paolo > >> Sent: Thursday, February 05, 2004 9:53 AM > >> To: '[EMAIL PROTECTED]' > >> Subject: RE: [OS-webwork] WW1.3 Memory Consumption > >> > >> > >> Hi Dick > >> > >> for my replies see inline. > >> > >>> You are right that the Query class contains a cache of all > >> expressions > >>> (instances of Query). It is a static HashMap in WW1.3 so it > >>> is never GC'd as > >>> you know. > >>> I can see a couple of cases that would make it grow: > >>> > >>> 1. Parameters that are sent in requests are set on actions > >>> with the help of > >>> the Query class. If you always have new parameter names, then > >>> they will > >>> generate new Query objects that will fill up the cache. So > >>> for example the > >>> parameters: > >>> myaction.action?paramOne=2&otherParam/subProperty=4 this > >>> would create 2 new Query instances (and 3 QuerySegments I > believe). > >>> Do you have some parameters that have dynamic names? > >> Do you mean the first request calls 'paramOne=2', after > >> that the same request calls 'paramTwo=2'? > >> No, we don't have dynamic names parameters... > >> > >>> 2. Some usages of the expand functionality of the expression > >>> language (when > >>> you use braces { } ) can give many Query objects. For example > >>> if you write: > >>> <ww:property value="{myProp}"/> then myProp is looked up, > >> and whatever > >>> String myProp contains is then looked up. This means that if > >>> myProp contains > >>> different String values all the time then alot of Query > >>> instances will be > >>> created. > >> The only constructs I find in our application which could match > >> are the following: > >> > >> - the templates checkbox.jsp, password.jsp, text.jsp etc. > >> - <ww:text name="'{0,date,EEEE, dd.MM.yyyy, HH:mm}'" > value0="@today"/> > >> - <ww:text name="'{0,number,#,##0.00}'" > value0="@dep/balance/amount"/> > >> > >> Do you see problems with it? > >> > >>> You can also try changing the Map to be a WeakHashMap and > >>> then the Query > >>> instances could be GC'd. But of course it would be better to > >>> find the real > >>> cause of the problem first. > >> That would be a possibility but as you said we should try > to find the > >> real cause. > >> > >> Anyway I would like to thank you for the help! > >> > >> Cheers > >> -Paolo > >> > >> > >> ------------------------------------------------------- > >> The SF.Net email is sponsored by EclipseCon 2004 > >> Premiere Conference on Open Tools Development and Integration > >> See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > >> http://www.eclipsecon.org/osdn > >> _______________________________________________ > >> Opensymphony-webwork mailing list > >> [EMAIL PROTECTED] > >> https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork > >> > > > > > > ------------------------------------------------------- > > The SF.Net email is sponsored by EclipseCon 2004 > > Premiere Conference on Open Tools Development and Integration > > See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > > http://www.eclipsecon.org/osdn > > _______________________________________________ > > Opensymphony-webwork mailing list > > [EMAIL PROTECTED] > > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork > > > > > > ------------------------------------------------------- > The SF.Net email is sponsored by EclipseCon 2004 > Premiere Conference on Open Tools Development and Integration > See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. > http://www.eclipsecon.org/osdn > _______________________________________________ > Opensymphony-webwork mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork >Title: Orion 2.x on localhost Class monitor
Class monitor
Session: | Orion 2.x on localhost |
Time of export: | Friday, February 6, 2004 9:40:31 AM CET | JVM time: | 06:04 |
Name | Instance count | Difference | Size |
---|---|---|---|
webwork.util.QuerySegment | 1201 | 0 | 28824 |
webwork.util.Query | 1032 | 0 | 24768 |
webwork.view.taglib.ui.table.SortFilterModel$Row | 570 | 0 | 9120 |
webwork.view.taglib.IfTag | 165 | 0 | 6600 |
webwork.view.taglib.PropertyTag | 161 | 0 | 7728 |
webwork.view.taglib.ui.table.WebTableColumn | 61 | 0 | 1952 |
webwork.action.SingleValueMap | 49 | 0 | 1176 |
webwork.action.factory.SessionMap | 49 | 0 | 1176 |
webwork.action.factory.ParameterMap | 49 | 0 | 1176 |
webwork.action.factory.ApplicationMap | 49 | 0 | 1176 |
webwork.view.taglib.ElseTag | 45 | 0 | 1080 |
webwork.expr.Token | 44 | 0 | 1760 |
webwork.view.taglib.IteratorTag | 41 | 0 | 2624 |
webwork.view.taglib.TextTag | 32 | 0 | 2048 |
webwork.action.ActionContext | 31 | 0 | 496 |
webwork.dispatcher.GenericDispatcher$LazyValueHolder | 29 | 0 | 696 |
webwork.dispatcher.GenericDispatcher | 29 | 0 | 1392 |
webwork.view.taglib.URLTag | 26 | 0 | 1456 |
webwork.view.taglib.ParamTag | 24 | 0 | 960 |
webwork.expr.ParserTokenManager | 22 | 0 | 1232 |
webwork.util.ServletValueStack | 22 | 0 | 528 |
webwork.expr.Parser | 22 | 0 | 1232 |
webwork.view.taglib.IncludeTag | 22 | 0 | 1056 |
webwork.expr.SimpleCharStream | 22 | 0 | 1408 |
webwork.view.taglib.ActionTag | 22 | 0 | 880 |
webwork.view.taglib.BeanTag | 16 | 0 | 640 |
webwork.view.taglib.ui.table.renderer.DefaultCellRenderer | 10 | 0 | 160 |
webwork.view.taglib.ui.table.WebTable | 8 | 0 | 832 |
webwork.view.taglib.ui.table.SortFilterModel | 8 | 0 | 256 |
webwork.view.taglib.ui.TextFieldTag | 8 | 0 | 832 |
webwork.view.taglib.iterator.SortIteratorTag | 7 | 0 | 336 |
webwork.util.SortIteratorFilter | 7 | 0 | 168 |
webwork.view.taglib.ElseIfTag | 6 | 0 | 240 |
webwork.view.taglib.PageOutputStream | 4 | 0 | 64 |
webwork.util.FastByteArrayOutputStream | 4 | 0 | 128 |
webwork.view.taglib.IteratorStatus$StatusState | 3 | 0 | 48 |
webwork.view.taglib.ui.TextAreaTag | 3 | 0 | 312 |
webwork.config.PropertiesConfiguration | 3 | 0 | 48 |
webwork.view.taglib.PageResponse | 2 | 0 | 64 |
webwork.action.factory.CommandActionFactoryProxy | 2 | 0 | 32 |
webwork.util.editor.IntegerEditor | 2 | 0 | 48 |
webwork.util.Counter | 2 | 0 | 96 |
webwork.action.factory.ParametersActionFactoryProxy | 1 | 0 | 16 |
webwork.config.DelegatingConfiguration | 1 | 0 | 16 |
webwork.action.factory.XMLActionFactoryProxy | 1 | 0 | 16 |
webwork.action.ActionContext$ActionContextThreadLocal | 1 | 0 | 16 |
webwork.action.factory.JavaActionFactory | 1 | 0 | 16 |
webwork.action.factory.PrefixActionFactoryProxy | 1 | 0 | 24 |
webwork.util.editor.BooleanEditor | 1 | 0 | 24 |
webwork.action.factory.ChainingActionFactoryProxy | 1 | 0 | 16 |
webwork.action.factory.DefaultActionFactory | 1 | 0 | 16 |
webwork.action.factory.ScriptActionFactoryProxy | 1 | 0 | 16 |
webwork.dispatcher.ServletDispatcher | 1 | 0 | 16 |
webwork.dispatcher.ViewActionWrapper | 1 | 0 | 16 |
webwork.action.factory.AliasingActionFactoryProxy | 1 | 0 | 24 |
webwork.action.factory.PrepareActionFactoryProxy | 1 | 0 | 16 |
webwork.action.factory.JspActionFactoryProxy | 1 | 0 | 16 |
webwork.config.XMLActionConfiguration | 1 | 0 | 32 |
webwork.dispatcher.ConfigurationViewMapping | 1 | 0 | 8 |
webwork.util.editor.DoubleEditor | 1 | 0 | 24 |
webwork.view.taglib.ui.PasswordTag | 1 | 0 | 104 |
webwork.dispatcher.CachingViewMapping | 1 | 0 | 16 |
webwork.config.DefaultConfiguration | 1 | 0 | 16 |
webwork.util.ValueStack | 1 | 0 | 16 |
webwork.action.factory.ContextActionFactoryProxy | 1 | 0 | 16 |
webwork.dispatcher.DefaultViewMapping | 1 | 0 | 16 |
Class monitor
Session: | Orion 2.x on localhost |
Time of export: | Friday, February 6, 2004 9:33:33 AM CET | JVM time: | 40:11 |
Name | Instance count | Difference | Size |
---|---|---|---|
webwork.util.ValueStack$MethodInfo | 4361 | 0 | 104664 |
webwork.util.QuerySegment | 1200 | 0 | 28800 |
webwork.util.ConcurrentReaderHashMap$Entry | 1185 | 0 | 28440 |
webwork.util.Query | 1019 | 0 | 24456 |
webwork.view.taglib.ui.table.SortFilterModel$Row | 584 | 0 | 9344 |
webwork.util.SimpleTest | 195 | 0 | 10920 |
webwork.view.taglib.IfTag | 149 | 0 | 5960 |
webwork.view.taglib.PropertyTag | 140 | 0 | 6720 |
webwork.action.factory.ApplicationMap | 38 | 0 | 912 |
webwork.action.factory.ParameterMap | 38 | 0 | 912 |
webwork.action.SingleValueMap | 38 | 0 | 912 |
webwork.action.factory.SessionMap | 38 | 0 | 912 |
webwork.view.taglib.ElseTag | 37 | 0 | 888 |
webwork.view.taglib.ui.table.WebTableColumn | 36 | 0 | 1152 |
webwork.view.taglib.IteratorTag | 34 | 0 | 2176 |
webwork.view.taglib.TextTag | 26 | 0 | 1664 |
webwork.action.ActionContext | 24 | 0 | 384 |
webwork.expr.Token | 22 | 0 | 880 |
webwork.dispatcher.GenericDispatcher$LazyValueHolder | 22 | 0 | 528 |
webwork.dispatcher.GenericDispatcher | 22 | 0 | 1056 |
webwork.view.taglib.ParamTag | 18 | 0 | 720 |
webwork.view.taglib.IncludeTag | 17 | 0 | 816 |
webwork.util.ServletValueStack | 17 | 0 | 408 |
webwork.view.taglib.ActionTag | 17 | 0 | 680 |
webwork.view.taglib.URLTag | 15 | 0 | 840 |
webwork.action.factory.ParameterMap$1 | 11 | 0 | 264 |
webwork.expr.ParserTokenManager | 11 | 0 | 616 |
webwork.expr.Parser | 11 | 0 | 616 |
webwork.view.taglib.BeanTag | 11 | 0 | 440 |
webwork.expr.SimpleCharStream | 11 | 0 | 704 |
webwork.view.taglib.ui.TextFieldTag | 8 | 0 | 832 |
webwork.view.taglib.iterator.SortIteratorTag | 5 | 0 | 240 |
webwork.util.SortIteratorFilter | 5 | 0 | 120 |
webwork.view.taglib.ElseIfTag | 5 | 0 | 200 |
webwork.util.FastByteArrayOutputStream | 4 | 0 | 128 |
webwork.view.taglib.ui.table.WebTable | 4 | 0 | 416 |
webwork.view.taglib.ui.table.SortFilterModel | 4 | 0 | 128 |
webwork.view.taglib.ui.table.renderer.DefaultCellRenderer | 4 | 0 | 64 |
webwork.view.taglib.PageOutputStream | 4 | 0 | 64 |
webwork.view.taglib.IteratorStatus$StatusState | 3 | 0 | 48 |
webwork.view.taglib.ui.TextAreaTag | 3 | 0 | 312 |
webwork.dispatcher.ViewActionWrapper | 3 | 0 | 48 |
webwork.config.PropertiesConfiguration | 3 | 0 | 48 |
webwork.action.factory.CommandActionFactoryProxy | 2 | 0 | 32 |
webwork.util.ConcurrentReaderHashMap | 2 | 0 | 112 |
webwork.util.ConcurrentReaderHashMap$BarrierLock | 2 | 0 | 16 |
webwork.view.taglib.PageResponse | 2 | 0 | 64 |
webwork.config.DefaultConfiguration | 1 | 0 | 16 |
webwork.action.factory.XMLActionFactoryProxy | 1 | 0 | 16 |
webwork.action.factory.JavaActionFactory | 1 | 0 | 16 |
webwork.dispatcher.DynamicViewMapping | 1 | 0 | 32 |
webwork.config.XMLActionConfiguration | 1 | 0 | 32 |
webwork.action.factory.PrefixActionFactoryProxy | 1 | 0 | 24 |
webwork.util.editor.BooleanEditor | 1 | 0 | 24 |
webwork.action.factory.ContextActionFactoryProxy | 1 | 0 | 16 |
webwork.action.factory.ChainingActionFactoryProxy | 1 | 0 | 16 |
webwork.action.ActionContext$ActionContextThreadLocal | 1 | 0 | 16 |
webwork.config.DelegatingConfiguration | 1 | 0 | 16 |
webwork.util.editor.IntegerEditor | 1 | 0 | 24 |
webwork.action.factory.JspActionFactoryProxy | 1 | 0 | 16 |
webwork.dispatcher.ServletDispatcher | 1 | 0 | 24 |
webwork.action.factory.ScriptActionFactoryProxy | 1 | 0 | 16 |
webwork.dispatcher.DefaultViewMapping | 1 | 0 | 16 |
webwork.action.factory.ParametersActionFactoryProxy | 1 | 0 | 16 |
webwork.action.factory.DefaultActionFactory | 1 | 0 | 16 |
webwork.action.factory.AliasingActionFactoryProxy | 1 | 0 | 24 |
webwork.util.editor.DoubleEditor | 1 | 0 | 24 |
webwork.action.factory.PrepareActionFactoryProxy | 1 | 0 | 16 |
webwork.util.Counter | 1 | 0 | 48 |
webwork.dispatcher.CachingViewMapping | 1 | 0 | 24 |
webwork.view.taglib.ui.PasswordTag | 1 | 0 | 104 |
webwork.dispatcher.ConfigurationViewMapping | 1 | 0 | 8 |
webwork.util.editor.IntegerObjectEditor | 1 | 0 | 24 |