Java 提前编译的JVM预热

Java 提前编译的JVM预热,java,clojure,jvm,Java,Clojure,Jvm,我用Leiningen在Clojure做一个项目。我必须对这个项目进行基准测试。我逐渐认识到我必须预热我的JVM。我已经提前编译了,这是否意味着我不必预热JVM 我知道调用函数f例如100次将在JIT中创建一个热点 我的基准测试函数load将使用包括filepath参数在内的给定参数运行代码一次。目前,我使用相同的参数运行函数load1000次,但我将不同的文件路径传递给它以存储结果。完成这1000个调用后,我将使用正确的文件路径再次执行该函数 问题是我的基准测试有副作用(将度量值写入文件)。所

我用Leiningen在Clojure做一个项目。我必须对这个项目进行基准测试。我逐渐认识到我必须预热我的JVM。我已经提前编译了,这是否意味着我不必预热JVM

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

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

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


有人能详细说明一下我需要注意什么吗?

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

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


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

我建议使用它来对Clojure代码进行基准测试。它会处理您询问的问题。运行基准测试需要更长的时间,因为Criterium进行JVM预热等,然后多次运行代码,给出平均值和其他统计数据。但是你可以对结果非常有信心。

如果我创建一个没有副作用的
负荷预热
会有帮助吗?或者这会导致JVM优化这个函数而不是
加载
函数吗?@ChristopherDetroyer好吧,你想让JIT优化
f
——你需要调用
f
一千次。是的,试试一个
warmup
函数,它可以调用
f
数千次。我同意,Criterium非常棒。OP需要了解它是如何运作的:-)好吧,很公平,@myfreeweb。