Skip to content


Repository files navigation

Clojars Project

Adding to your project

Add [lein-jmh "0.3.0"] to your :plugins section. For example:

(defproject your-project #_...
  :plugins [[lein-jmh "0.3.0"]])

What is it?

Leiningen plugin for running jmh-clojure benchmarks.


Run lein help jmh to get started.

As mentioned in the help, by default, a jmh.edn file at the root of your project is used to configure lein-jmh. Please see the sample file for a complete guide. The task takes an optional single argument that gives the task and/or benchmark options. If omitted, all defined benchmarks will be run:

$ lein jmh

Give a map to configure the runner. For example, to run all benchmarks that match a selector from a data file in an alternate location:

$ lein jmh '{:file "benchmarks/parser.edn", :select :decode}'

Additionally, the available JMH profilers may be listed with: lein jmh :profilers.

A more involved example can be found here.

More information

This plugin is a very thin wrapper for the jmh-clojure-task library. Please see the documentation there for full usage instructions and extended examples.

Note about tiered compilation

The JVM option -XX:TieredStopAtLevel=1 is normally set automatically by Leiningen when running code in your project. This option speeds up JVM startup time but is normally problematic for benchmarking as it disables the C2 compiler.

Since lein-jmh merges the :jmh profile automatically when running benchmarks, adding the following to your project's :profiles key should be sufficient for most users:

:profiles {:jmh {:jvm-opts []}}

Alternatively, use :fork and specify different :jvm :args to override the Leiningen parent process arguments. This can be specified in your jmh.edn file, or globally via the task options map.

Running the tests

lein test

Or, lein test-all for all supported Clojure versions.


Copyright © 2017-2024 Justin Conklin

Distributed under the Eclipse Public License, the same as Clojure.