我们使用 drools 对大批量数据执行规则。
通过大批量数据,我的意思是我们将大量(5000-10000)的脂肪对象加载到 drools 中。
我们观察到 JVM 堆持续上升,规则执行开始下降。
我们是否有推荐的 JVM 选项或 API 来释放工作内存。
我正在使用 statefulKnowldegeSession 并在 fireRules() 之后调用 dispose()。
最佳答案
您(几乎可以肯定)经历的只是在堆上积累大量对象的影响,而您的事实只是冰山一角。
您是否需要在工作内存中同时存储所有 5k 到 10k 事实,例如,为了建立这些事实之间的关系?如果不是,一个合理的方法是在插入 1k 个事实后触发 AllRules。 (运行基准测试以确定最佳限制。)
然后您可以调用 dispose() 并重新创建 session ,这应该比手动撤回所有事实更快。
了解所有 10k 事实的循环性能也很有趣:
h = session.insert( f );
session.fireAllRules();
session.retract( h );
始终保持相同的 session 。
关于java - JBoss 流口水的推荐设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294647/