Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.0
-
None
Description
Compared to JEXL 2.1.1, arithmetic operations are slower in 3.0.
The culprit is the logic around operators overloading; when the JexlArithmetic does not overload any operator, discovering whether it overloads one is repeated each time an interpreter is created (which is a costly introspection operation).
As a workaround, one ca use an arithmetic that does overload an operator (for instance size) as in:
public static class JMeterArithmetic extends JexlArithmetic { public JMeterArithmetic(boolean astrict) { super(astrict); } /** * A workaround to create an operator overload * @param jma an improbable parameter class * @return 1 */ public int size(JMeterArithmetic jma) { return 1; } }
And use an instance of that class at engine creation time as in:
JexlEngine jexl = new JexlBuilder() .cache(512) .silent(true) .strict(true) .arithmetic(new JMeterArithmetic(true)) .create();