我们正在使用drools来执行大批量数据的规则。
大批量数据,我的意思是我们将很多(5000-10000)脂肪物品装入流口水中。
我们观察到JVM堆的持续增长和规则执行开始降级。
我们是否推荐使用JVM选项或API来释放工作内存。
我正在使用statefulKnowldegeSession并在fireRules()之后调用dispose()。
答案 0 :(得分:2)
你(几乎可以肯定)只会遇到堆积大量物体的影响,而你的事实只是冰山一角。
你是否需要在工作记忆中同时获得所有5k到10k的事实,例如,为了建立这些事实之间的关系?如果没有,一个合理的方法是在插入1k事实之后fireAllRules。 (运行基准以确定最佳限制。)
然后你可以调用dispose()并重新创建会话,这应该比手动收回所有事实更快。
了解循环对所有10k事实的表现也很有趣:
h = session.insert( f );
session.fireAllRules();
session.retract( h );
始终保持相同的会话。