您如何描述Drools应用程序?

时间:2015-05-20 22:24:43

标签: java performance profiling drools rule-engine

我怎样才能知道每个流口水的状况/后果的执行频率以及服用的时间有多长?

为此目的,常见的JVM分析器太低级了,因为内部流氓方法的名称不会告诉你他们正在执行什么规则。

1 个答案:

答案 0 :(得分:2)

对于条件评估,这个问题基本上无法回答。左侧的模式和约束不会被评估为一个单元(在某种意义上,Java方法是一个单元),而是作为表达式网络,在必要时以小分期进行评估。此外,在多个条件下发生的约束可能导致相同的代码,从而消除了多个评估。评估的必要性取决于事实的插入,删除和修改;努力取决于这些事实中的价值。所有这一切都是基础算法的结果,最初是Forgy博士的Rete,而在Drools 6.x,Phreaky,显然通过提高效率使情况变得更加简单。

对条件进行基准测试可以通过插入一个类的事实来改变它们的字段值并对其进行计时(考虑到Java遇到的常见困难)来完成。注意,即使这是危险的,因为努力可能取决于工作记忆的当前状态,即已插入的其他类的事实的值。而且你必须考虑重新建立初始状态所需的努力 - 在WM中留下事实最终会因内存管理而导致开销增加。

对于约束评估,情况稍好一些。 kaskelotti关于使用事件监听器的提示是值得注意的;而不是试图计算这些短暂的时间间隔,只计算它们。另请注意,对于许多Drools应用程序来说,将右侧实现为(静态)Java方法可能是一个很好的编码实践:这些可以更容易地进行单元测试(和基准测试)。