Spring 大大降低了 Optaplanner 求解器的分数评估速度
Spring drastically slows down score evaluation speed of Optaplanner solver
我有如下一段代码
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
OptimalTerminationTimeFinder.findOptimalTerminationTime(
8,
10,
50,
Duration.ofSeconds(1),
Duration.ofMillis(250));
}
其中 OptimalTerminationFinder
解决了数百个问题并尝试找到给定问题大小的最佳终止时间。
问题是当我评论注释@SpringBootApplication
时,分数评估速度从40k增加到80k,反之亦然。
为什么 Spring 会大大降低求解器的速度?我阅读了 user guide 的 Spring,唯一的区别是他们使用 SolverManager
但这不是问题,是吗?我只是使用 Solver
class.
我无法承受 Spring 如此剧烈的速度下降 - 时差在制作中至关重要。
我用 java-spring-boot quickstart 重现了性能差异。
我相信较慢的计算速度是由 running the application 使用 spring-boot-maven-plugin
引起的(我假设如果您尝试 运行一个@SpringBootApplication
注解class).
如果您首先 build an executable JAR 您的项目,然后 运行 在您的 IDE 中或使用 java -jar ...
从终端中获取 JAR,您将看到完整的速度分数计算。
我没有解释为什么 Spring Boot Maven 插件会阻止完整的性能,但您的应用程序的生产构建不会受到影响。
我打赌是日志记录。默认情况下,它们可能在 spring 和普通 java 之间有所不同(因此 Yurloc 的回答是正确的)。检查两次运行的日志记录级别和附加程序。
我看到分数计算速度下降了 2 倍或更多:
- 类别
org.optaplanner
从 DEBUG
到 TRACE
日志记录可以下降 4 倍。这取决于。
- 类别
org.optaplanner
从 INFO
到 DEBUG
的日志记录可能会下降 2 倍。这取决于。
- 类别
org.drools
从 WARN
到 DEBUG
可以下降 10 倍。这取决于。
- 从
console
到 file
日志记录的 Appender 可以下降 2 倍。这取决于。
我有如下一段代码
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
OptimalTerminationTimeFinder.findOptimalTerminationTime(
8,
10,
50,
Duration.ofSeconds(1),
Duration.ofMillis(250));
}
其中 OptimalTerminationFinder
解决了数百个问题并尝试找到给定问题大小的最佳终止时间。
问题是当我评论注释@SpringBootApplication
时,分数评估速度从40k增加到80k,反之亦然。
为什么 Spring 会大大降低求解器的速度?我阅读了 user guide 的 Spring,唯一的区别是他们使用 SolverManager
但这不是问题,是吗?我只是使用 Solver
class.
我无法承受 Spring 如此剧烈的速度下降 - 时差在制作中至关重要。
我用 java-spring-boot quickstart 重现了性能差异。
我相信较慢的计算速度是由 running the application 使用 spring-boot-maven-plugin
引起的(我假设如果您尝试 运行一个@SpringBootApplication
注解class).
如果您首先 build an executable JAR 您的项目,然后 运行 在您的 IDE 中或使用 java -jar ...
从终端中获取 JAR,您将看到完整的速度分数计算。
我没有解释为什么 Spring Boot Maven 插件会阻止完整的性能,但您的应用程序的生产构建不会受到影响。
我打赌是日志记录。默认情况下,它们可能在 spring 和普通 java 之间有所不同(因此 Yurloc 的回答是正确的)。检查两次运行的日志记录级别和附加程序。
我看到分数计算速度下降了 2 倍或更多:
- 类别
org.optaplanner
从DEBUG
到TRACE
日志记录可以下降 4 倍。这取决于。 - 类别
org.optaplanner
从INFO
到DEBUG
的日志记录可能会下降 2 倍。这取决于。 - 类别
org.drools
从WARN
到DEBUG
可以下降 10 倍。这取决于。 - 从
console
到file
日志记录的 Appender 可以下降 2 倍。这取决于。