[jboss-jira] [JBoss JIRA] (DROOLS-651) Duplicate method call inside patterns

Mark Proctor (JIRA) issues at jboss.org
Wed Nov 19 16:49:39 EST 2014


    [ https://issues.jboss.org/browse/DROOLS-651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13021346#comment-13021346 ] 

Mark Proctor commented on DROOLS-651:
-------------------------------------

caching would not be cheap, it would require an array of Objects for each variable in each tuple. So it would probably add another 25% to over all memory usage. This would be over kill when typically most people are just doing person.age, so the additional cache is just wasted space with no performance gains.

We could in the future look at allowing optional cached bindings, but right now it's lower priority and would add in a lot of complexity both on the engine and the language.

> Duplicate method call inside patterns
> -------------------------------------
>
>                 Key: DROOLS-651
>                 URL: https://issues.jboss.org/browse/DROOLS-651
>             Project: Drools
>          Issue Type: Enhancement
>    Affects Versions: 6.2.0.Beta3
>         Environment: Win7, Drools 6.2.0 Beta3 (probably all Drools versions)
>            Reporter: Marc Dzaebel
>            Assignee: Mario Fusco
>            Priority: Minor
>
> Create sample Drools project, add following method to the Message class:
> {noformat}   public List<String> list() { 
>       System.out.println("Call!");
>       return Arrays.asList("one", "two"); 
>    } {noformat}
> sample.drl:
> {noformat}
> package com.sample
> import com.sample.DroolsTest.Message;
> import java.util.List;
> import java.util.ArrayList;
>  
> rule ""
>     when m : Message(L : list(), L.size>0)
>     then System.out.println("L:"+L);
> end
> {noformat}
> Running the project will result in the following output:
> {noformat}
> Call!
> Call!
> L:[one, two]
> {noformat}
> So _list()_ is called *two* times (duplicate). This may be due to the replacement of "L" with _list()_ in the second constraint. This is ok for simple +getters+ as here HotSpot optimizes this away. However, long running methods will produce unnecessary overhead, especially if further constraints on "L" are added (which I verified produce additional calls to list()). So at least methods with one or more arguments should be saved in temporary variables that should be used in further constraints. A fix of this problem will certainly accelerate Drools performance on similar patterns. If this is not feasible, at least a comment should be added to the documentation.



--
This message was sent by Atlassian JIRA
(v6.3.8#6338)


More information about the jboss-jira mailing list