<div dir="ltr">Hi,<div><br></div><div>I am using Drools for some time an I recently increased the number of rules and their complexity.</div><div>I have now about 200 rules, for 700 x 200 facts (rules on a cartesian product on them).</div>

<div><br></div><div>Since then, the computation of rules explodes with the following exception :</div><div><div>java.lang.OutOfMemoryError: unable to create new native thread</div><div><span class="" style="white-space:pre">        </span>at java.lang.Thread.$$YJP$$start0(Native Method) [na:1.6.0_30]</div>

<div><span class="" style="white-space:pre">        </span>at java.lang.Thread.start0(Thread.java) [na:1.6.0_30]</div><div><span class="" style="white-space:pre">        </span>at java.lang.Thread.start(Thread.java:640) [na:1.6.0_30]</div>

<div><span class="" style="white-space:pre">        </span>at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727) ~[na:1.6.0_30]</div><div><span class="" style="white-space:pre">        </span>at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657) ~[na:1.6.0_30]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.rule.constraint.MvelConstraint.jitEvaluator(MvelConstraint.java:232) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:197) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div>

<div><span class="" style="white-space:pre">        </span>at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) ~[org-drools-drools-core-5.5.0.Final.jar:5.5.0.Final]</div><div><span class="" style="white-space:pre">        </span>...</div>

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

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

</div><div>Anyway, I wanted to disable this JIT thing.</div><div>I saw that the disabling is only available since <b>5.5.0.-final</b> right ?<br>I have switched to that version but I can&#39;t seem to be able to disable it.</div>

<div><br></div><div>I have tried both :<br><b>-Dmvel2.disable.jit=true</b> (which would not be a viable solution for production anyway : We can&#39;t rely on some settings of the server to ensure things work)</div><div>And also this :<br>

<b>OptimizerFactory.setDefaultOptimizer(&quot;reflective&quot;); </b>(found <a href="http://mvel.codehaus.org/Disabling+the+JIT+Compiler">here</a>)</div><div><br></div><div>Any help would be appreciated.</div><div>Brgds,</div>

<div><br></div><div>Raphael</div></div>