[jboss-jira] [JBoss JIRA] Created: (JBRULES-1471) Accumulate should not call getResult() more then necessary

Geoffrey De Smet (JIRA) jira-events at lists.jboss.org
Sun Feb 17 14:11:26 EST 2008


Accumulate should not call getResult() more then necessary
----------------------------------------------------------

                 Key: JBRULES-1471
                 URL: http://jira.jboss.com/jira/browse/JBRULES-1471
             Project: JBoss Drools
          Issue Type: Task
      Security Level: Public (Everyone can see)
          Components: Reteoo
            Reporter: Geoffrey De Smet
         Assigned To: Edson Tirelli
             Fix For: 5.0.0-M1


For this rule:
rule "roomCapacityTooSmall" // TODO it takes 50-90% of the performance of drools-solver
    when
        $period : Period();
        $room : Room($capacity : capacity);
        $totalStudentSize : Number(intValue > $capacity) from accumulate(
            Exam(period == $period, room == $room, $studentSize : topicStudentSize),
            sum($studentSize)
        );
   ...
end

Outside drl, I update 2 out of 700 Exam objects and call fireAllRulesAndCalculateDecisionScore. 
The drl never changes an Exam. Period and Room never change.

That results into this log:
Breakpoint reached at org.drools.solver.core.evaluation.EvaluationHandler.fireAllRulesAndCalculateDecisionScore(EvaluationHandler.java:90)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)

There are 4 accumulate calls and 4 reverse calls. That might be accurate.
There are 8 getResult calls, that should only be 1.

Also, the getResult method creates a new Double instance each time:
  return new Double( data.total );
It might be better to do
  return Double.valueOf(data.total);
to allow the JVM to hot spot optimize it.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list