我正在使用Leiningen在Clojure做一个项目。我必须对这个项目进行基准测试我明白我必须热身我的JVM。我已经提前编译了,这是否意味着我不需要热身我的JVM?
据我所知,调用函数f
例如100次将在JIT中创建一个热点。
我的基准测试函数load
将使用包含filepath参数的给定参数运行一次代码。目前,我使用相同的参数运行我的函数load
1000次,但我传递了一个不同的文件路径来存储其结果。完成这1000次调用后,我再次使用正确的文件路径执行该函数。
问题是我的基准测试有副作用(将测量值写入文件)。因此,在执行真正的运行之前,我宁愿不执行1000次。目前我只是给它一个虚拟文件,所以它仍然写入文件,但我放弃了这些结果。
请有人详细说明我必须注意什么?
答案 0 :(得分:4)
我建议使用Criterium对Clojure代码进行基准测试。它会处理您询问的问题。运行基准测试需要更长的时间,因为Criterium会执行JVM预热等,然后多次运行代码,为您提供平均值和其他统计信息。但是你可以对结果感到相当自信。
答案 1 :(得分:2)
不,AOT并不意味着你不必热身JIT。 AOT指的是Clojure编译,而不是优化。
尝试将副作用分成不同的功能,并在运行基准测试之前使用纯部件运行预热。
UPD:您还可以使用/ dev / null作为测试运行的文件。