设置Clover的flushPolicy和flushInterval时,会对内存消耗产生什么影响

时间:2014-07-25 12:30:42

标签: clover

我在谷歌搜索它,但没有找到与此相关的任何内容,所以在这里问我感觉别人也可能感兴趣。

flushPolicy设置为intervalthreaded以及flushInterval的某些值时,对内存消耗的影响是什么?如果使用更短​​的间隔,对内存的需求是否会降低,因为到目前为止收集的覆盖范围将被卸载到磁盘上?

对现实世界使用的小轮询:

  1. 您是否在实践中使用这些政策?
  2. 您使用的间隔时间以及原因?

1 个答案:

答案 0 :(得分:2)

对于不同的刷新策略,内存消耗几乎没有差异。简单地说(*),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方法+语句+分支,这是〜4MB记录文件,因此在500MB / s SSD驱动器上,每秒可以进行~100次刷新。

我在500毫秒到5000毫秒之间看到了 flushInterval 值。我建议使用较低的值。为什么?因为Clover的报告目标(clover2:clover)将暂停2 * flushInterval直到它开始报告生成 - 以确保至少发生一次刷新操作。因此,拥有不合理的flushInterval值会降低你的构建速度。