Hi Andreas, I've looked at the PropertyResolver at line 1447 a key is determined to use in a ConcurrentHashMap [1]. This key is the application returned by getApplication() after some testing I found out that equals on application doesn't work by putting getApplication().equals(getApplication()) in a sample application.
If I remove the special case for equals, hashCode and toString from the intercept method [2] getApplication().equals(getApplication()) returns true as I would expect. I've created a similar HashMap in my test application and a map with Application as a key seems to work after the change. Didn't have a chance to do any real world test with this. Thanks Bram [1] https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java#L1447 [2] https://github.com/ops4j/org.ops4j.pax.wicket/blob/master/service/src/main/java/org/ops4j/pax/wicket/internal/PaxWicketApplicationFactory.java#L115 2012/10/22 Andreas Pieber <anpie...@gmail.com>: > well, it's quite possible that the CG lib does some quircks here. Has > anyone already tried to set breakpoints into the PropertyResolver [1] > checking what's exactly the problem? I'll start tomorrow morning by > doing exactly this... > > If getApplication().equals(getApplication()) is really the problem > (where did you find that code btw?) I might find a workaround for that > case... let's see to nail down the problem first. > > Kind regards, > Andreas > > [1] > https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/core/util/lang/PropertyResolver.java > > On Mon, Oct 22, 2012 at 5:07 PM, Achim Nierbeck <bcanh...@googlemail.com> > wrote: >> Oh, one more, >> >> after running a Component Report i got the following info about it: >> >> >> >> Empty Collections >> >> >> Detected the following empty collections: >> •6.482.518 instances of java.util.concurrent.ConcurrentHashMap$Segment >> retain >= 829.762.448 bytes. >> >> >> Collection Fill Ratios >> >> >> Detected the following collections with fill ratios below 20%: >> •432.156 instances of java.util.concurrent.ConcurrentHashMap retain >= >> 1.018.329.768 bytes. >> >> Map Collision Ratios >> >> >> Detected the following maps with collision ratios above 80%: >> •1 instances of java.util.concurrent.ConcurrentHashMap retain >> 1.038.046.920 bytes. >> •1 instances of java.util.concurrent.ConcurrentHashMap$Segment retain 296 >> bytes. >> >> I haven't found the root cause of it, but somehow I have the >> impression this might be an issue of Pax-Wicket? >> >> btw. I'm using Pax-Wicket in Version 1.0.2 >> >> regards, Achim >> >> >> 2012/10/22 Achim Nierbeck <bcanh...@googlemail.com>: >>> Here a little update to this, cause today my application did run into >>> an OOM due to this (with 1GB Heap) >>> The current HeapDump shows me >>> >>> That the wicket PropertyResolver uses about 1GB Ram, from those are >>> about 62MB for >>> >>> ------------------------------------------------------------------------------------------------------------------ >>> ref >>> |CGLIB$CALLBACK_0|org.ops4j.pax.wicket.internal.PaxWicketApplicationFactory$WebApplicationWrapper >>> @ 0xf2b693d0 >>> ------------------------------------------------------------------------------------------------------------------ >>> >>> I guess those are basically the session, looks OK right now. >>> But the rest is consumed by about 260000 ConcurrentHashMap Entries. >>> >>> For example: >>> >>> Type|Name |Value >>> ------------------------------------------------------------------------------------------------------------------ >>> ref >>> |CGLIB$CALLBACK_0|org.ops4j.pax.wicket.internal.PaxWicketApplicationFactory$WebApplicationWrapper >>> @ 0xc1fa0250 >>> ------------------------------------------------------------------------------------------------------------------ >>> >>> I don't know how to say this, but it seems awfully wrong right now ... >>> >>> regards, Achim >>> >>> 2012/10/22 Achim Nierbeck <bcanh...@googlemail.com>: >>>> Hi, >>>> >>>> I've seen the exact thing but didn't have the time (yet) to get a hold of >>>> it. >>>> But since it's mostly Wicket classes involved I had the impression >>>> it's wicket itself >>>> that does this. >>>> To prove something like it, I wanted to create an example which would work >>>> in both world (pax-wicket and wicket) but due to lack of time I wasn't >>>> able to >>>> get to it. >>>> >>>> But since I'm not the only one I'd guess this is something worthy to >>>> investigate :) >>>> My next test would have been to switch to Wicket 6 (pax-wicket 2.0) >>>> >>>> regards, Achim >>>> >>>> 2012/10/22 Bram Pouwelse <b...@pouwelse.com>: >>>>> Hi, >>>>> >>>>> I'm working on an application that's using Pax Wicket (version 1.1.0). >>>>> Because the application is using more memory than expected I'm running >>>>> some tests and analysing heap dumps for a few days now. >>>>> >>>>> While analysing the heap of my "weekend test" I've found this at the >>>>> top of the Pax Wicket bundle class loader at the top of the dominator >>>>> tree, seems to me that the PropertyResolver is creating new >>>>> DefaultClassCache instances all the time but I don't understand why. >>>>> >>>>> Below I've pasted a few selections from Eclipse Memory Analyzer: >>>>> >>>>> >>>>> Dominator tree: >>>>> >>>>> Class Name >>>>> | Shallow Heap | Retained Heap | >>>>> Percentage >>>>> ----------------------------------------------------------------------------------------------------------------------------------------------------- >>>>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5 @ >>>>> 0xc123ee58 | 88 | 643,602,288 | >>>>> 89.39% >>>>> |- java.util.Vector @ 0xc1252208 >>>>> | 32 | 643,566,800 | >>>>> 89.38% >>>>> | '- java.lang.Object[1280] @ 0xc2445ee8 >>>>> | 5,136 | 643,566,768 | >>>>> 89.38% >>>>> | |- class org.apache.wicket.util.lang.PropertyResolver @ >>>>> 0xb9b5d330 | 32 | >>>>> 643,420,472 | 89.36% * >>>>> | | '- java.util.concurrent.ConcurrentHashMap @ 0xc2962bf8 >>>>> | 48 | 643,420,440 | >>>>> 89.36% >>>>> | | '- java.util.concurrent.ConcurrentHashMap$Segment[16] @ >>>>> 0xc2962c28 | 80 | 643,420,392 | >>>>> 89.36% >>>>> | | |- java.util.concurrent.ConcurrentHashMap$Segment @ >>>>> 0xc2963098 | 40 | 643,418,872 | >>>>> 89.36% ** >>>>> | | | |- >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @ 0xd8674190 >>>>> | 1,048,592 | 643,418,768 | 89.36% >>>>> | | | | '- >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea9687a8 >>>>> | 32 | 642,370,176 | 89.22% >>>>> | | | | |- >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea967a28 >>>>> | 32 | 642,366,720 | 89.22% >>>>> | | | | | |- >>>>> java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea966ca8 >>>>> | 32 | 642,363,264 | 89.22% *** >>>>> | | | | | |- >>>>> org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache @ >>>>> 0xea967398| 16 | 3,424 | 0.00% >>>>> | | | | | '- Total: 2 entries >>>>> | | | >>>>> | | | | |- >>>>> org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache @ >>>>> 0xea968118 | 16 | 3,424 | 0.00% >>>>> | | | | '- Total: 2 entries >>>>> | | | >>>>> ----------------------------------------------------------------------------------------------------------------------------------------------------- >>>>> >>>>> * class org.apache.wicket.util.lang.PropertyResolver @ 0xb9b5d330 >>>>> [statics]: >>>>> Type|Name |Value >>>>> --------------------------------------------------------------------------------------------- >>>>> ref |SET |set >>>>> ref |IS |is >>>>> ref |GET |get >>>>> ref >>>>> |applicationToClassesToGetAndSetters|java.util.concurrent.ConcurrentHashMap >>>>> @ 0xc2962bf8 >>>>> int |RESOLVE_CLASS |2 >>>>> int |CREATE_NEW_VALUE |1 >>>>> int |RETURN_NULL |0 >>>>> ref |log >>>>> |org.ops4j.pax.logging.slf4j.Slf4jLogger @ 0xc2972ba0 >>>>> --------------------------------------------------------------------------------------------- >>>>> >>>>> ** java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @ >>>>> 0xd8674190 [attributes] >>>>> Type |Name |Value >>>>> -------------------------------------------------------------------------------------- >>>>> float|loadFactor|0.75 >>>>> ref |table >>>>> |java.util.concurrent.ConcurrentHashMap$HashEntry[262144] @ 0xd8674190 >>>>> int |threshold |196608 >>>>> int |modCount |185871 >>>>> int |count |185871 >>>>> ref |sync |java.util.concurrent.locks.ReentrantLock$NonfairSync >>>>> @ 0xc29630c0 >>>>> -------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> *** java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea966ca8 >>>>> [attributes] >>>>> Type|Name |Value >>>>> --------------------------------------------------------------------------------------------------- >>>>> ref |next |java.util.concurrent.ConcurrentHashMap$HashEntry @ 0xea965f28 >>>>> ref |value|org.apache.wicket.util.lang.PropertyResolver$DefaultClassCache >>>>> @ 0xea966618 >>>>> int |hash |1234246985 >>>>> ref |key >>>>> |nl.ditp.fabuland.core.internal.WicketApplication$$EnhancerByCGLIB$$4188d86a >>>>> @ 0xc22bcc88 >>>>> --------------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> Is this caused by a coding error in the application or a bug in Wicket >>>>> / Pax Wicket? >>>>> >>>>> Thanks, >>>>> >>>>> Bram Pouwelse >>>>> >>>>> _______________________________________________ >>>>> general mailing list >>>>> general@lists.ops4j.org >>>>> http://lists.ops4j.org/mailman/listinfo/general >>>> >>>> >>>> >>>> -- >>>> >>>> Apache Karaf <http://karaf.apache.org/> Committer & PMC >>>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> >>>> Committer & Project Lead >>>> OPS4J Pax for Vaadin >>>> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project >>>> Lead >>>> blog <http://notizblog.nierbeck.de/> >>> >>> >>> >>> -- >>> >>> Apache Karaf <http://karaf.apache.org/> Committer & PMC >>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> >>> Committer & Project Lead >>> OPS4J Pax for Vaadin >>> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project >>> Lead >>> blog <http://notizblog.nierbeck.de/> >> >> >> >> -- >> >> Apache Karaf <http://karaf.apache.org/> Committer & PMC >> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> >> Committer & Project Lead >> OPS4J Pax for Vaadin >> <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project >> Lead >> blog <http://notizblog.nierbeck.de/> >> >> _______________________________________________ >> general mailing list >> general@lists.ops4j.org >> http://lists.ops4j.org/mailman/listinfo/general > > _______________________________________________ > general mailing list > general@lists.ops4j.org > http://lists.ops4j.org/mailman/listinfo/general _______________________________________________ general mailing list general@lists.ops4j.org http://lists.ops4j.org/mailman/listinfo/general