From 9a753e3fd6dbe9ea6028cee3e0e41221336a1a57 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 30 Sep 2024 19:24:29 +0800 Subject: [PATCH] JsonPutJmh --- .../dromara/hutool/json/jmh/JsonPutJmh.java | 56 +++++++++++++++++++ .../hutool/json/jmh/JsonToStringJmh.java | 3 + 2 files changed, 59 insertions(+) create mode 100644 hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonPutJmh.java diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonPutJmh.java b/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonPutJmh.java new file mode 100644 index 000000000..8b0fad48e --- /dev/null +++ b/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonPutJmh.java @@ -0,0 +1,56 @@ +package org.dromara.hutool.json.jmh; + +import com.google.gson.JsonObject; +import org.dromara.hutool.core.util.RandomUtil; +import org.dromara.hutool.json.JSONObject; +import org.openjdk.jmh.annotations.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 测试JSON树结构转JSON字符串性能 + */ +@BenchmarkMode(Mode.AverageTime)//每次执行平均花费时间 +@Warmup(iterations = 1, time = 1) //预热5次调用 +@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) // 执行5此,每次1秒 +@Threads(1) //单线程 +@Fork(1) // +@OutputTimeUnit(TimeUnit.NANOSECONDS) // 单位:纳秒 +@State(Scope.Benchmark) // 共享域 +public class JsonPutJmh { + + Map testData; + private JSONObject hutoolJSON; + private JsonObject gson; + private com.alibaba.fastjson2.JSONObject fastJSON; + + + @Setup + public void setup() { + testData = new HashMap<>(100, 1); + for (int i = 0; i < 100; i++) { + testData.put(RandomUtil.randomString(10), RandomUtil.randomString(20)); + } + + hutoolJSON = new JSONObject(); + gson = new JsonObject(); + fastJSON = new com.alibaba.fastjson2.JSONObject(); + } + + @Benchmark + public void gsonJmh() { + testData.forEach(gson::addProperty); + } + + @Benchmark + public void hutoolJmh() { + testData.forEach(hutoolJSON::putObj); + } + + @Benchmark + public void fastJSONJmh() { + testData.forEach(fastJSON::put); + } +} diff --git a/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonToStringJmh.java b/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonToStringJmh.java index febcc676e..42d034992 100644 --- a/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonToStringJmh.java +++ b/hutool-json/src/test/java/org/dromara/hutool/json/jmh/JsonToStringJmh.java @@ -10,6 +10,9 @@ import org.openjdk.jmh.annotations.*; import java.util.concurrent.TimeUnit; +/** + * 测试JSON树结构转JSON字符串性能 + */ @BenchmarkMode(Mode.AverageTime)//每次执行平均花费时间 @Warmup(iterations = 1, time = 1) //预热5次调用 @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) // 执行5此,每次1秒