将 JVM 参数传递给 JMH
Pass JVM arguments to JMH
我正在尝试分析一些 JMH 基准。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道 JMH 在分叉的 JVM 中运行基准测试,所以我不是很清楚如何做到这一点。我正在使用 SBT.
使用@Fork
注释:
@Benchmark
@Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
public void someBenchmark() {
...
}
请注意,传递给 JMH 的 JVM 参数也会传播到分叉基准。
如果我正确阅读了 sbt-jmh 文档,它会使用 jmh:run ...
将应用程序选项传递给 JMH runner。所以,让 JMH 命令行接受 --jvmArgs "..."
,我会尝试做 jmh:run --jvmArgs "-XX:+PrintGCDetails"
。或者,正如@apangin 提到的那样,添加 @Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
.
但对于您的特定用例 -- "see how much garbage is generated" -- 使用捆绑的 GC 分析器可能更好,该分析器由 -prof gc
激活。请参阅 JMHSample_35_Profilers.java#l71.
中的示例
我正在尝试分析一些 JMH 基准。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道 JMH 在分叉的 JVM 中运行基准测试,所以我不是很清楚如何做到这一点。我正在使用 SBT.
使用@Fork
注释:
@Benchmark
@Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
public void someBenchmark() {
...
}
请注意,传递给 JMH 的 JVM 参数也会传播到分叉基准。
如果我正确阅读了 sbt-jmh 文档,它会使用 jmh:run ...
将应用程序选项传递给 JMH runner。所以,让 JMH 命令行接受 --jvmArgs "..."
,我会尝试做 jmh:run --jvmArgs "-XX:+PrintGCDetails"
。或者,正如@apangin 提到的那样,添加 @Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
.
但对于您的特定用例 -- "see how much garbage is generated" -- 使用捆绑的 GC 分析器可能更好,该分析器由 -prof gc
激活。请参阅 JMHSample_35_Profilers.java#l71.