[jboss-jira] [JBoss JIRA] Updated: (JBRULES-3116) Performance Regression due to mvel ParserContext now set, resulting in CompositeClassLoader loads
Fabian Lange (JIRA)
jira-events at lists.jboss.org
Mon Jul 4 09:09:23 EDT 2011
[ https://issues.jboss.org/browse/JBRULES-3116?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Fabian Lange updated JBRULES-3116:
----------------------------------
Attachment: abstractParser-bug1.png
JProfiler Screenshot showing the Callchain.
> Performance Regression due to mvel ParserContext now set, resulting in CompositeClassLoader loads
> -------------------------------------------------------------------------------------------------
>
> Key: JBRULES-3116
> URL: https://issues.jboss.org/browse/JBRULES-3116
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-compiler
> Affects Versions: 5.2.0.Final
> Reporter: Fabian Lange
> Assignee: Mark Proctor
> Attachments: abstractParser-bug1.png
>
>
> I observed this issue already with 5.1, but now had time to verify it with 5.2.
> Initial compilation time has exploded with those versions.
> I have with the same test cases with 5.2 this:
> org.drools.util.CompositeClassLoader$CachingLoader.load taking a total of 42 seconds
> With 5.0 (where this Caching was not yet implemented)
> I had a total time of less than 5 seconds spend in the ClassLoading.
> The reason for this took me a while to find, but now I do have it:
> org.mvel2.compiler.AbstractParser.createPropertyToken
> is invoking hasImports() and getImport() on the ParseContext if not null.
> Those in turn are invoking org.mvel2.ParserConfiguration.checkForDynamicImport
> which invokes org.drools.util.CompositeClassLoader.loadClass
> This is invoked on my table for expressions like this: "age >= 16"
> So the org.drools.util.CompositeClassLoader$CachingLoader.load
> will look for a class called "age" and a class called "16". Because the class not exists null/false are returned from the callchain.
> However neither the CachingLoader, nor the Map in AbstractParser will cache the negative result. Causing this to happen for each row in my decisiontable.
> And in 5.0 the whole part of the callgraph is not there.
> I figured out, that in 5.0 versions, the AbstractParser never had a parse context in createPropertyToken
> This might be because of the inconsistent usage of
> protected static ThreadLocal<ParserContext> parserContext;
> protected ParserContext pCtx;
> So where does us leave this?
> A possible easy solution would be to add the "negative" lookups to the CachingLoader.
> However I would like to have doublechecked if the change in Abstract Parser was intentional and is now working correctly. Thus invoking the checkDynamicImports a lot is correct. Is it really the case that the parser needs to check for each literal this dynamic import thing? it obviously didnt do before.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list