Hi,

I am using Drools for some time an I recently increased the number of rules and their complexity.
I have now about 200 rules, for 700 x 200 facts (rules on a cartesian product on them).

Since then, the computation of rules explodes with the following exception :
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.$$YJP$$start0(Native Method) [na:1.6.0_30]
at java.lang.Thread.start0(Thread.java) [na:1.6.0_30]
at java.lang.Thread.start(Thread.java:640) [na:1.6.0_30]
at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727) ~[na:1.6.0_30]
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657) ~[na:1.6.0_30]
at org.drools.rule.constraint.MvelConstraint.jitEvaluator(MvelConstraint.java:232) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:197) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]
...

After Googling a bit, I saw that this is due to JIT compilation of my rules.
For some reason, each one seem to create a Thread and ends up with thousands of them.

First of all, I find a bit risky that the JIT compilation is fired by some hardcoded threshold :
I was not expecting such a technical tricky optimization to randomly activate depending of my data.

Anyway, I wanted to disable this JIT thing.
I saw that the disabling is only available since 5.5.0.-final right ?
I have switched to that version but I can't seem to be able to disable it.

I have tried both :
-Dmvel2.disable.jit=true (which would not be a viable solution for production anyway : We can't rely on some settings of the server to ensure things work)
And also this :
OptimizerFactory.setDefaultOptimizer("reflective"); (found here)

Any help would be appreciated.
Brgds,

Raphael