在我的应用程序中,我将近10,000条规则加载到Drools(Drools 5.5.0.final)。但是应用程序会抛出java.lang.OutOfMemoryError Exception。我的jvm args,
-Xms1024m
-Xmx1024m
任何人都可以帮我解决这个问题。我也使用了BigMemory(http://terracotta.org/products/bigmemory),但仍然遇到了同样的错误。
提前致谢!
答案 0 :(得分:2)
使用像VisualVM这样的探查器(免费且非常容易运行)来查看内存随时间变化的情况,并在它出现OutOfMemory之前获取堆快照。
特别是那个图表可以告诉你一些有趣的事情(通过在你的代码中添加一些Thread.sleep
),这可以给你和我们一个线索是什么导致它:
答案 1 :(得分:0)
每次重复使用相同的“statefulKnowledgeSession”进行触发时,可能会发生这种情况。在这种情况下,每个statefulKnowledgeSession.insert(fact)
新事实被插入但不删除流行事实。这是你的情况,请在使用以下方法触发新的processinsatance之前删除/收回先前插入的事实:
`ksession.retract(factHandle);