package org.bura.benchmarks.json; import groovy.json.JsonSlurper; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.boon.json.JsonParser; import org.boon.json.implementation.JsonFastParser; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.GenerateMicroBenchmark; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @State(Scope.Benchmark) @BenchmarkMode(Mode.Throughput) @OutputTimeUnit(TimeUnit.SECONDS) @Fork(value = 1, jvmArgsAppend = { "-Xmx2048m", "-server", "-XX:+AggressiveOpts" }) @Measurement(iterations = 10, time = 3, timeUnit = TimeUnit.SECONDS) @Warmup(iterations = 20, time = 3, timeUnit = TimeUnit.SECONDS) public class DeserializationBenchmarks { private static final String RESOURCE_CITYS = "citys"; private static final String RESOURCE_REPOS = "repos"; private static final String RESOURCE_USER = "user"; private static final String RESOURCE_REQUEST = "request"; @Param({ RESOURCE_CITYS, RESOURCE_REPOS, RESOURCE_USER, RESOURCE_REQUEST }) private String resourceName; private String resource; @Setup(Level.Iteration) public void setup() { resource = Helper.getResource(resourceName + ".json"); if (Arrays.asList(RESOURCE_CITYS, RESOURCE_REPOS).contains(resourceName)) { gsonType = new TypeToken<List<Map<String, Object>>>() { }.getType(); jacksonType = new TypeReference<Set<HashMap<String, Object>>>() { }; } else { gsonType = new TypeToken<Map<String, Object>>() { }.getType(); jacksonType = new TypeReference<HashMap<String, Object>>() { }; } } private final ObjectMapper jacksonMapper = new ObjectMapper(); private TypeReference<?> jacksonType; @GenerateMicroBenchmark public Object jackson() throws IOException { return jacksonMapper.readValue(resource, jacksonType); } private final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create(); private java.lang.reflect.Type gsonType; @GenerateMicroBenchmark public Object gson() { return gson.fromJson(resource, gsonType); } private final JsonParser boon = new JsonFastParser(); @GenerateMicroBenchmark public Object boon() { return boon.parse(resource); } private final JsonSlurper groovy = new JsonSlurper(); @GenerateMicroBenchmark public Object groovy() { return groovy.parseText(resource); } }