java - 使用提前编译的 JVM 预热

标签 java clojure jvm

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

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

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

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

有人可以详细说明我需要注意什么吗?

最佳答案

我推荐使用 Criterium用于对 Clojure 代码进行基准测试。它会处理您询问的问题。运行基准测试需要更长的时间,因为 Criterium 会进行 JVM 预热等,然后多次运行代码,为您提供平均值和其他统计数据。但您可以对结果充满信心。

关于java - 使用提前编译的 JVM 预热,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584694/

相关文章:

java - OrientDB 有类似 @MappedSuperclass 的东西吗?

clojure - 可下载的 Clojure 引用手册

java - 跟踪垃圾收集

Java 递归和返回

java - 如何在 Activity 之间传递自定义对象?

java - mvn包不包含xml

clojure - 为什么 Clojure 的 gensym 在每次调用时增加 3?

clojure - 对 lazy-seq 的调用应该有什么范围?

java - java编译究竟是如何发生的?

clojure - 了解 Clojure 绑定(bind)语法