在 Optaplanner 中分析约束流分数计算

Profiling constraint streams score calculation in Optaplanner

我正在考虑分析我的 Optaplanner 项目中的分数计算,以了解是否有任何热点可以从优化中获益。但是visualvm显示大部分时间都在org.drools.modelcompiler.constraints.ConstraintEvaluator$InnerEvaluator$_2.evaluate的自拍时间。因此,我假设此方法实际上是运行大量约束代码的方法。找出哪些特定代码段花费最多时间的最佳方法是什么?

关于 Constraint Streams 需要了解的一点是它不是命令式编程,因此传统的性能优化技术(例如代码分析)不会很有帮助。相反,我建议您将约束流视为 SQL - 实现快速 SQL 的方法是考虑数据的流动方式、加入方式以及索引内容。

最近我写了一篇博客post 也解释了making CS run fast. However, CS is internally interpreted by the Drools engine, and therefore studying it may give you some insights 背后的技巧。并非所有的见解都适用于 CS,但如果你看一下 drools-metric,你应该能够看到哪些约束相对较慢。然后它变成了一个调整游戏。