通过提前编译进行JVM预热

时间:2014-05-10 18:18:23

标签: java clojure jvm

我正在使用Leiningen在Clojure做一个项目。我必须对这个项目进行基准测试我明白我必须热身我的JVM。我已经提前编译了,这是否意味着我不需要热身我的JVM?

据我所知,调用函数f例如100次将在JIT中创建一个热点。

我的基准测试函数load将使用包含filepath参数的给定参数运行一次代码。目前,我使用相同的参数运行我的函数load 1000次,但我传递了一个不同的文件路径来存储其结果。完成这1000次调用后,我再次使用正确的文件路径执行该函数。

问题是我的基准测试有副作用(将测量值写入文件)。因此,在执行真正的运行之前,我宁愿不执行1000次。目前我只是给它一个虚拟文件,所以它仍然写入文件,但我放弃了这些结果。

请有人详细说明我必须注意什么?

2 个答案:

答案 0 :(得分:4)

我建议使用Criterium对Clojure代码进行基准测试。它会处理您询问的问题。运行基准测试需要更长的时间,因为Criterium会执行JVM预热等,然后多次运行代码,为您提供平均值和其他统计信息。但是你可以对结果感到相当自信。

答案 1 :(得分:2)

不,AOT并不意味着你不必热身JIT。 AOT指的是Clojure编译,而不是优化。

尝试将副作用分成不同的功能,并在运行基准测试之前使用纯部件运行预热。

UPD:您还可以使用/ dev / null作为测试运行的文件。