Issue609.java
package com.alibaba.fastjson2.benchmark;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONWriter;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@State(Scope.Thread)
public class Issue609 {
private static final List<Student> objList;
private static final List<String> strList;
private static final String source;
static {
objList = new ArrayList<>(100000);
strList = new ArrayList<>(100000);
for (int i = 0; i < 100000; i++) {
Student student = new Student("������������" + i, i % 10, "������������������������������������������������267���" + i);
objList.add(student);
strList.add(JSON.toJSONString(student));
}
source = JSON.toJSONString(objList);
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(Issue609.class.getName())
.warmupIterations(3)
.measurementIterations(5)
.forks(1)
.jvmArgsAppend("-Xms128m", "-Xmx128m")
.build();
new Runner(opt).run();
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON1ObjSeThroughput(Blackhole bh) {
for (Student student : objList) {
bh.consume(JSON.toJSONString(student));
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON1ObjDeThroughput(Blackhole bh) {
for (String student : strList) {
bh.consume(JSON.parseObject(student, Student.class));
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON2ObjSeThroughput(Blackhole bh) {
for (Student student : objList) {
bh.consume(
com.alibaba.fastjson2.JSON.toJSONString(student)
);
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON2ObjDeThroughput(Blackhole bh) {
for (String student : strList) {
bh.consume(com.alibaba.fastjson2.JSON.parseObject(student, Student.class));
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON1ArraySeThroughput(Blackhole bh) {
bh.consume(
JSON.toJSONString(objList)
);
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON1ArrayDeThroughput(Blackhole bh) {
bh.consume(
JSON.parseArray(source, Student.class)
);
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON2ArraySeThroughput(Blackhole bh) {
bh.consume(
com.alibaba.fastjson2.JSON.toJSONString(objList, JSONWriter.Feature.ReferenceDetection)
);
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public void fastJSON2ArrayDeThroughput(Blackhole bh) {
bh.consume(
com.alibaba.fastjson2.JSON.parseArray(source, Student.class)
);
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON1ObjSeTime(Blackhole bh) {
for (Student student : objList) {
bh.consume(
JSON.toJSONString(student)
);
}
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON1ObjDeTime(Blackhole bh) {
for (String student : strList) {
bh.consume(
JSON.parseObject(student, Student.class)
);
}
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON2ObjSeTime(Blackhole bh) {
for (Student student : objList) {
bh.consume(
com.alibaba.fastjson2.JSON.toJSONString(student)
);
}
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON2ObjDeTime(Blackhole bh) {
for (String student : strList) {
bh.consume(com.alibaba.fastjson2.JSON.parseObject(student, Student.class));
}
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON1ArraySeTime(Blackhole bh) {
bh.consume(JSON.toJSONString(objList));
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON1ArrayDeTime(Blackhole bh) {
bh.consume(
JSON.parseArray(source, Student.class)
);
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON2ArraySeTime(Blackhole bh) {
bh.consume(com.alibaba.fastjson2.JSON.toJSONString(objList, JSONWriter.Feature.ReferenceDetection));
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void fastJSON2ArrayDeTime(Blackhole bh) {
bh.consume(com.alibaba.fastjson2.JSON.parseArray(source, Student.class));
}
private static class Student {
private String name;
private int age;
private String address;
public Student() {
}
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
}