I have some JMH benchmarks that I'm trying to analyze. I want to enable GC logging to see how much garbage is being generated, but I can't figure out how to pass JVM arguments. I know JMH runs benchmarks in a forked JVM, so it's not immediately obvious to me how to do this. I'm using SBT.
Pass JVM arguments to JMH
JMH passes any arguments passed to it. You can just add them to the command line, –
Hereld
If I read sbt-jmh docs right, it passes the application options to JMH runner with jmh:run ...
. So, having that JMH command line accepts --jvmArgs "..."
, I would try to do jmh:run --jvmArgs "-XX:+PrintGCDetails"
. Or, as @apangin mentions, add @Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
.
But for your particular use case -- "see how much garbage is generated" -- it might be even better idea to use a bundled GC profiler, activated with -prof gc
. See the example at JMHSample_35_Profilers.java#l71.
Use @Fork
annotation:
@Benchmark
@Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
public void someBenchmark() {
...
}
Note that JVM arguments passed to JMH are also propagated to forked benchmarks.
© 2022 - 2024 — McMap. All rights reserved.