java - 您如何分析 Drools 应用程序?

标签 java performance profiling drools rule-engine

我怎样才能知道每个 drools 条件/结果的执行频率以及执行时间?

对于此目的,常见的 JVM 分析器级别太低,因为内部 drools 方法的名称不会告诉您它们正在执行什么规则。

最佳答案

这个问题对于条件评估来说基本上是不可能回答的。左侧的模式和约束不是作为一个单元计算的(在某种意义上,Java 方法是一个单元),而是作为一个表达式网络,在必要时分批计算。此外,出现在多个条件下的约束可能会产生相同的代码,从而消除多重评估。评估的必要性取决于事实的插入、删除和修改;努力因这些事实中的值(value)观而异。所有这些都是底层算法的结果,最初是 Dr. Forgy 的 Rete,在 Drools 6.x 中是 Phreaky,这显然通过提高效率使情况变得更加不那么简单。

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

约束评估的情况要好一些。 kaskelotti 关于使用事件监听器的提示值得注意;与其尝试计算这些短时间间隔,不如数一数。另请注意,对于许多 Drools 应用程序而言,将右侧实现为(静态)Java 方法可能是良好的编码习惯:这些可以更轻松地进行单元测试(和基准测试)。

关于java - 您如何分析 Drools 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361424/

相关文章:

Java 分析 - Tomcat 服务器终止

java - 为什么我们在 Spring Hibernate 集成中使用服务类

java - 如何计算数组的输入

performance - rust 去污牛哈希集

python - 如果满足条件,则从列表列表中删除列表

javascript - 如果用户发送另一个请求,请使用 .abort() 取消现有的 ajax 请求

.net - Visual Studio 分析异步方法,包括实际等待时间

MongoDB - 重新启动服务器后不同的查询执行时间

java - RestEasy Web 服务无法使用指定的 URL 获取响应?

java - 如何在 Spark Java 中创建复杂的 StructType 架构