java - drools rule engine runs out of memory on a small rule file -


i wrote java code uses drools rule engine. when trying test performance of code adding more , more rules rule file(.drl). program stopped working when packed 100000 rules in 14mb rule file.

my rule file looks (mock-up rules):

package drools.rules  import drools.dicomimage  rule "phi rule0"      when         $di : dicomimage(boolname == true)             system.out.println("rule 0 applied"); end  rule "phi rule1"      when         $di : dicomimage(boolname == true)             system.out.println("rule 1 applied"); end  rule "phi rule2"      when         $di : dicomimage(boolname == true)             system.out.println("rule 2 applied"); end 

here piece of code applies rules:

string filename = "rule100000.drl"; reader reader = new inputstreamreader(applydicomrules.class.getresourceasstream(filename)); packagebuilder pbuilder = new packagebuilder(); pbuilder.addpackagefromdrl(reader);  rulebase rbase = rulebasefactory.newrulebase(); rbase.addpackage(pbuilder.getpackage());  runrules(); 

it exited @ line doing addpackagefromdrl following error:

exception in thread "main" java.lang.outofmemoryerror: java heap space  @ java.lang.throwable.printstacktrace(unknown source)  @ org.eclipse.jdt.internal.compiler.util.util.getexceptionsummary(util.java:627)  @ org.eclipse.jdt.internal.compiler.compiler.handleinternalexception(compiler.java:587)  @ org.eclipse.jdt.internal.compiler.compiler.compile(compiler.java:522)  @ org.drools.compiler.commons.jci.compilers.eclipsejavacompiler.compile(eclipsejavacompiler.java:405)  @ org.drools.compiler.commons.jci.compilers.abstractjavacompiler.compile(abstractjavacompiler.java:49)  @ org.drools.compiler.rule.builder.dialect.java.javadialect.compileall(javadialect.java:405)  @ org.drools.compiler.compiler.dialectcompiletimeregistry.compileall(dialectcompiletimeregistry.java:46)  @ org.drools.compiler.compiler.packageregistry.compileall(packageregistry.java:107)  @ org.drools.compiler.compiler.packagebuilder.compileall(packagebuilder.java:1317)  @ org.drools.compiler.compiler.packagebuilder.compileallrules(packagebuilder.java:968)  @ org.drools.compiler.compiler.packagebuilder.addpackage(packagebuilder.java:956)  @ org.drools.compiler.compiler.packagebuilder.addpackagefromdrl(packagebuilder.java:452)  @ org.drools.compiler.compiler.packagebuilder.addpackagefromdrl(packagebuilder.java:428)  @ drools.applydicomrules.initializedrools(applydicomrules.java:65)  @ drools.applydicomrules.main(applydicomrules.java:26) 

does not work if run -xms1024m. don't think going need memory anyway. , applying rules single fact (object).

what taking ram? not supposed put many rules (100000) in 1 rule file?

well, wouldn't call file containing 100000 rules "small", which, according favourite dictionary, means "few in number or little in amount", , 100000 isn't "a few". if experiment has serious background should reconsider approach - likely, on wrong track.

that, said, isn't drools rule engine either runs out of memory: java compiler can't handle amount of source code in single java file.

  • using several drl files should circumvent oom problem.
  • also, trying 6.x version might since code generation , compilation has changed between 5.x , 6.x.
  • however, quite meaningful set of rules comprising 100000 going cause problems when reach execution stage.

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Website Login Issue developed in magento -

Can the constants be defined inside a model file of a framework in PHP? -