JavaABS is a tool to execute microbenchmarks written with JMH.
Moreover, it is used in Laaber and Leitner's paper "An Evaluation of Open-Source Software Microbenchmark Suites for Continuous Performance Assessment" published at Mining Software Repositories (MSR) in 2018.
Run the following script to execute ABS:
groovy -cp "src:." copper.groovy -d -c config.json-cconfig file-ddynamic ABS metric
Examplary configuration file for RxJava project:
{
"project" : "/home/ubuntu/projects/java/RxJava",
"build_system" : "gradle",
"gradle_target" : "clean build -x test",
"benchmarks" : "build/libs",
"benchmark_jar" : "rxjava-1.2.10-SNAPSHOT-benchmarks.jar",
"custom_benchmark_config" : "-wi 10 -i20 -f 1",
"degree_of_violation" : "0.6",
"confidence" : "0.05",
"min_effect_size" : "0.3",
"log" : "tmp.csv",
"repeats" : 2,
"files" : [
{
"test_file": "src/main/java/rx/internal/util/SubscriptionList.java",
"methods": [
{
"name": "add",
"params": [
"Subscription"
],
"typeParams": {}
}
]
},
{
"test_file": "src/main/java/rx/Observable.java",
"methods": [
{
"name": "lift",
"params": [
"Operator<? extends R, ? super T>"
],
"typeParams": {
"R": "java.lang.Object",
"T": "java.lang.Object"
}
},
{
"name": "unsafeSubscribe",
"params": [
"Subscriber<? super T>"
],
"typeParams": {
"T": "java.lang.Object"
}
}
]
}
]
}JSON attributes (partial):
"project"path to project directory"build_systemmvn or gradle"benchmarksfolder where JMH jar is placed"benchmark_jarname of JMH jar"degree_of_violation"inserted relative regression for ABS"log"output file path"repeats"repetitions of experiment (r in MSR paper)"files"methods to inject regressions into
JavaABS reports all results in CSV form to the file specified as "log".
A sample output file is depicted below:
Run;Method altered;Microbenchmark;Result
0;Baseline;io.protostuff.benchmarks.RuntimeSchemaBenchmark.baseline;0.9870666624852784
0;Baseline;io.protostuff.benchmarks.RuntimeSchemaBenchmark.baseline;0.953202183493458
0;Baseline;io.protostuff.benchmarks.RuntimeSchemaBenchmark.generated_deserialize_10_int_field;80.25977955639304
0;Baseline;io.protostuff.benchmarks.RuntimeSchemaBenchmark.generated_deserialize_10_int_field;88.68216840394962