Geronimo's xbean-finder also supplies this functionality using asm. david jencks
On Jun 14, 2013, at 9:55 AM, sebb <seb...@gmail.com> wrote: > On 14 June 2013 17:35, Christopher Schultz <ch...@christopherschultz.net> > wrote: >> Mark, >> >> On 6/14/13 12:21 PM, Mark Thomas wrote: >>> On 14/06/2013 16:57, Christopher Schultz wrote: >>>> Mark, >>>> >>>> On 6/14/13 3:16 AM, Mark Thomas wrote: >>>>> On 14/06/2013 03:31, Christopher Schultz wrote: >>>>> >>>>>> It might be nice if this were not a one-of-many decision, but if a >>>>>> client could choose more than one type. A bit-mask or a list of >>>>>> scan-types would be nice. I could see the same type of scanner being >>>>>> used for multiple different purposes. >>>>> >>>>> That is what ServletContainerIniiializers are for. >>>> >>>> Well, crap. I had never seen those before. >>>> >>>> I'm curious, though. Thinking about this the other day with a colleague >>>> who was complaining about some kind of Spring configuration that >>>> evidently loaded every class available on the classpath and kept them in >>>> memory (thus leading to heap and PermGen issues), I concluded that the >>>> only sane way to do this kind of probing would be to probe everything in >>>> a ClassLoader that was intended to be discarded after the probing as to >>>> avoid loading classes unnecessarily. >>>> >>>> If an SCI retains a reference to any of the Class objects in the >>>> Set<Class> parameter, that hypothetical throw-away ClassLoader is no >>>> longer thrown-away. >>> >>> The early Tomcat 7 implementations did it like this - loaded every class >>> and then examined the class object. More recent implementations use BCEL >>> to look at the byte code. It is faster and uses less memory. We also use >>> caching to ensure each class is only processed once. > > That functionality sounds like it might be useful as a general purpose > library item, possibly as part of a utility jar for Commons BCEL. > For example JMeter has to scan classes for certain interfaces on > startup. It's current implementation is a bit wasteful. > >> Cool. What Classloader gets used to actually load the Class objects, >> though? > > BCEL reads class files as files. > > http://commons.apache.org/proper/commons-bcel/ > >> In the pathological case of @HandlesType('java.lang.Object') >> that means everything gets loaded into .. the WebappClassLoader? >> >> One could imagine a case where an SCI wants to look at everything, but >> then only ends up caring about 2% of what's been loaded. Is that just >> the price you have to pay for inspecting everything -- that you >> seriously waste PermGen? (at least for current Oracle JVMs) >> >> -chris >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org