package org.openjdk.jmh.profile;
import org.openjdk.jmh.infra.BenchmarkParams;
import org.openjdk.jmh.infra.IterationParams;
import org.openjdk.jmh.results.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class HotspotCompilationProfiler extends AbstractHotspotProfiler {
public HotspotCompilationProfiler() throws ProfilerException {
super("HotspotCompilationMBean", "getInternalCompilerCounters");
}
@Override
public String getDescription() {
return "HotSpot (tm) JIT compiler profiling via implementation-specific MBeans";
}
@Override
public Collection<? extends Result> afterIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams, IterationResult result) {
Map<String, Long> current = counters().getCurrent();
return Arrays.asList(
new ScalarResult(Defaults.PREFIX + "compiler.totalTime",
current.get("java.ci.totalTime") * 1D / TimeUnit.MILLISECONDS.toNanos(1),
"ms", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.totalCompiles",
current.get("sun.ci.totalCompiles"),
"methods", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.totalBailouts",
current.get("sun.ci.totalBailouts"),
"methods", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.totalInvalidates",
current.get("sun.ci.totalInvalidates"),
"methods", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.nmethodCodeSize",
current.get("sun.ci.nmethodCodeSize") / 1024d,
"Kb", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.nmethodSize",
current.get("sun.ci.nmethodSize") / 1024d,
"Kb", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.osrCompiles",
current.get("sun.ci.osrCompiles"),
"methods", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.osrBytes",
current.get("sun.ci.osrBytes") / 1024d,
"Kb", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.osrTime",
current.get("sun.ci.osrTime") * 1d / TimeUnit.MILLISECONDS.toNanos(1),
"ms", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.standardCompiles",
current.get("sun.ci.standardCompiles"),
"methods", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.standardBytes",
current.get("sun.ci.standardBytes") / 1024d,
"Kb", AggregationPolicy.MAX),
new ScalarResult(Defaults.PREFIX + "compiler.standardTime",
current.get("sun.ci.standardTime") * 1d / TimeUnit.MILLISECONDS.toNanos(1),
"ms", AggregationPolicy.MAX)
);
}
}