使用JMH计算指标

时间:2014-03-25 16:31:36

标签: java benchmarking cpu-usage jmh

如何使用JMH计算CPU时间和内存量? 例如,我有: 代码:

@State(Scope.Thread)
@BenchmarkMode(Mode.All)
public class JMHSample_My {

    int x = 1;
    int y = 2;

    @GenerateMicroBenchmark
    public int measureAdd() {
        return (x + y);
    }

    @GenerateMicroBenchmark
    public int measureMul() {
        return (x * y);
    }

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(".*" + JMHSample_My.class.getSimpleName() + ".*")
                .warmupIterations(5)
                .measurementIterations(5)
                .forks(1)
                .build();

        new Runner(opt).run();
    }
}

结果:

Benchmark                  Mode   Samples         Mean   Mean error    Units
JMHSample_My.measureAdd    thrpt         5  1060579.757    39506.950   ops/ms

JMHSample_My.measureMul    thrpt         5  1046872.684    79805.116   ops/ms

JMHSample_My.measureAdd     avgt         5        0.000        0.000    ms/op

JMHSample_My.measureMul     avgt         5        0.000        0.000    ms/op

JMHSample_My.measureAdd   sample   9549793        0.000        0.000    ms/op

JMHSample_My.measureMul   sample   9287002        0.000        0.000    ms/op

JMHSample_My.measureAdd       ss         5        0.001        0.000       ms

JMHSample_My.measureMul       ss         5        0.001        0.000       ms

我可以看到时间请求的数量,即测试的平均时间,但是没有看到平均CPU使用量和内存使用量。这可以通过JMH来完成吗?

1 个答案:

答案 0 :(得分:7)

对于内存使用情况,您可以在构建转轮选项时使用GC方法添加HS_GCaddProfiler个分析器。

对于CPU使用率,基准测试通常会自然消耗100%的可用CPU。但是,您应该检查其他可用的配置文件,看看它们是否会产生对您有用的信息。