【发布时间】:2016-03-30 05:27:23
【问题描述】:
我正在尝试分析一些 JMH 基准。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道 JMH 在一个分叉的 JVM 中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用SBT。
【问题讨论】:
-
JMH 传递任何传递给它的参数。您可以将它们添加到命令行中,
我正在尝试分析一些 JMH 基准。我想启用 GC 日志记录以查看生成了多少垃圾,但我不知道如何传递 JVM 参数。我知道 JMH 在一个分叉的 JVM 中运行基准测试,所以对我来说如何做到这一点并不是很明显。我正在使用SBT。
【问题讨论】:
如果我正确阅读了 sbt-jmh 文档,它会将应用程序选项传递给带有 jmh:run ... 的 JMH runner。所以,让那个 JMH 命令行接受--jvmArgs "...",我会尝试做jmh:run --jvmArgs "-XX:+PrintGCDetails"。或者,正如@apangin 提到的,添加@Fork(jvmArgsAppend = "-XX:+PrintGCDetails")。
但是对于您的特定用例——“查看产生了多少垃圾”——使用捆绑的 GC 分析器可能会更好,通过-prof gc 激活。请参阅JMHSample_35_Profilers.java#l71 的示例。
【讨论】:
使用@Fork注解:
@Benchmark
@Fork(jvmArgsAppend = "-XX:+PrintGCDetails")
public void someBenchmark() {
...
}
请注意,传递给 JMH 的 JVM 参数也会传播到分叉基准。
【讨论】: