我在谷歌上搜索它,但没有找到与此相关的任何东西,所以在这里问,因为我觉得其他人可能也有兴趣。
flushPolicy
当设置为interval
或threaded
与某个值一起设置时,对内存消耗有什么影响flushInterval
?如果使用更短的时间间隔,由于到目前为止收集的覆盖范围将被卸载到磁盘,对内存的需求是否会降低?
对现实世界使用情况的小轮询:
- 您在实践中使用这些策略吗?
- 你使用什么间隔,为什么?
我在谷歌上搜索它,但没有找到与此相关的任何东西,所以在这里问,因为我觉得其他人可能也有兴趣。
flushPolicy
当设置为interval
或threaded
与某个值一起设置时,对内存消耗有什么影响flushInterval
?如果使用更短的时间间隔,由于到目前为止收集的覆盖范围将被卸载到磁盘,对内存的需求是否会降低?
对现实世界使用情况的小轮询:
不同刷新策略的内存消耗实际上没有差异。简单地说 (*),Clover 的工作方式是分配一个巨大的 long[] 数组并将其永久保存在内存中。刷新将数组内容转储到硬盘驱动器上的文件 - 数组不会被释放或收缩。
(*) 有三种不同的覆盖记录器用于全球覆盖 ( https://confluence.atlassian.com/display/CLOVER/Coverage+Recorders ) 和五种不同的每次测试记录策略可用 ( https://confluence.atlassian.com /display/CLOVER/Clover+Performance+Tuning )
flushPolicy =interval或flushPolicy=threaded有用吗?是的,它们在您不终止 JVM 时很有用。Clover 的默认刷新策略仅在 JVM 关闭钩子上写入全局覆盖数据;这意味着在关闭 JVM 之前,您不会获得任何覆盖率数据。在这种情况下,假设您的 Tomcat 服务器永久运行,并且您正在重新部署应用程序并重新运行测试。
可以使用哪些冲洗间隔?根据我的经验,刷新操作非常快。快速计算:具有 ~1MLOC 的项目可能有 ~1M 方法+语句+braches,即 ~4MB 记录文件,因此在 500MB/s SSD 驱动器上,您每秒可以进行 ~100 次刷新。
我已经看到flushInterval值介于 500 毫秒和 5000 毫秒之间。我建议使用较低的值。为什么?因为 Clover 的报告目标 (clover2:clover) 将暂停 2*flushInterval 直到它开始生成报告 - 以确保至少发生了一次刷新操作。因此,具有不合理的高 flushInterval 值会减慢您的构建速度。