Skip to content

Commit 2c4ce87

Browse files
committed
add benchmark code
1 parent 0dc1164 commit 2c4ce87

File tree

76 files changed

+9734
-670
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+9734
-670
lines changed

demo/pom.xml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.jsoniter</groupId>
5-
<version>0.9.5-SNAPSHOT</version>
5+
<version>0.9.8-SNAPSHOT</version>
66
<artifactId>jsoniter-demo</artifactId>
77
<name>json iterator</name>
88
<description>jsoniter (json-iterator) is fast and flexible JSON parser available in Java and Go</description>
@@ -49,7 +49,7 @@
4949
<dependency>
5050
<groupId>com.jsoniter</groupId>
5151
<artifactId>jsoniter</artifactId>
52-
<version>0.9.6-SNAPSHOT</version>
52+
<version>0.9.8-SNAPSHOT</version>
5353
</dependency>
5454
<dependency>
5555
<groupId>org.openjdk.jmh</groupId>
@@ -76,6 +76,16 @@
7676
<artifactId>dsl-json</artifactId>
7777
<version>1.3.2</version>
7878
</dependency>
79+
<dependency>
80+
<groupId>org.apache.thrift</groupId>
81+
<artifactId>libthrift</artifactId>
82+
<version>0.9.1</version>
83+
</dependency>
84+
<dependency>
85+
<groupId>org.slf4j</groupId>
86+
<artifactId>slf4j-api</artifactId>
87+
<version>1.7.22</version>
88+
</dependency>
7989
<!--<dependency>-->
8090
<!--<groupId>com.dslplatform</groupId>-->
8191
<!--<artifactId>dsl-json-processor</artifactId>-->
@@ -91,7 +101,11 @@
91101
<artifactId>moshi</artifactId>
92102
<version>1.3.1</version>
93103
</dependency>
94-
104+
<dependency>
105+
<groupId>com.google.protobuf</groupId>
106+
<artifactId>protobuf-java</artifactId>
107+
<version>3.2.0rc2</version>
108+
</dependency>
95109
</dependencies>
96110

97111
<build>

demo/src/main/java/decoder/com/jsoniter/demo/User.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,64 @@ public class User implements com.jsoniter.spi.Decoder {
33
public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { if (iter.readNull()) { com.jsoniter.CodegenAccess.resetExistingObject(iter); return null; }
44
com.jsoniter.demo.User obj = (com.jsoniter.CodegenAccess.existingObject(iter) == null ? new com.jsoniter.demo.User() : (com.jsoniter.demo.User)com.jsoniter.CodegenAccess.resetExistingObject(iter));
55
if (!com.jsoniter.CodegenAccess.readObjectStart(iter)) { return obj; }
6-
switch (com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter)) {
7-
case -799547430:
8-
obj.firstName = (java.lang.String)iter.readString();
9-
break;
6+
int hash = com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter);
7+
if (hash == -1078100014) {
8+
obj.lastName = (java.lang.String)iter.readString();
9+
} else {
10+
switch (hash) {
1011
case -1078100014:
1112
obj.lastName = (java.lang.String)iter.readString();
1213
break;
14+
case -799547430:
15+
obj.firstName = (java.lang.String)iter.readString();
16+
break;
1317
case -768634731:
1418
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.User", iter);
1519
break;
1620
default:
1721
iter.skip();
1822
}
19-
while (com.jsoniter.CodegenAccess.nextToken(iter) == ',') {
20-
switch (com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter)) {
23+
}
24+
while (true) {
25+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') { break; }
26+
hash = com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter);
27+
if (hash == -799547430) {
28+
obj.firstName = (java.lang.String)iter.readString();
29+
} else {
30+
switch (hash) {
31+
case -1078100014:
32+
obj.lastName = (java.lang.String)iter.readString();
33+
continue;
2134
case -799547430:
2235
obj.firstName = (java.lang.String)iter.readString();
2336
continue;
37+
case -768634731:
38+
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.User", iter);
39+
continue;
40+
default:
41+
iter.skip();
42+
}
43+
}
44+
if (com.jsoniter.CodegenAccess.nextToken(iter) != ',') { break; }
45+
hash = com.jsoniter.CodegenAccess.readObjectFieldAsHash(iter);
46+
if (hash == -768634731) {
47+
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.User", iter);
48+
} else {
49+
switch (hash) {
2450
case -1078100014:
2551
obj.lastName = (java.lang.String)iter.readString();
2652
continue;
53+
case -799547430:
54+
obj.firstName = (java.lang.String)iter.readString();
55+
continue;
2756
case -768634731:
2857
obj.score = com.jsoniter.CodegenAccess.readInt("score@decoder.com.jsoniter.demo.User", iter);
2958
continue;
30-
}
59+
default:
3160
iter.skip();
3261
}
62+
}
63+
}
3364
return obj;
3465
}public java.lang.Object decode(com.jsoniter.JsonIterator iter) throws java.io.IOException {
3566
return decode_(iter);

demo/src/main/java/encoder/com/jsoniter/demo/User.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
public class User extends com.jsoniter.spi.EmptyEncoder {
33
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
44
if (obj == null) { stream.writeNull(); return; }
5-
stream.writeRaw("{\"firstName\":\"", 14);
5+
stream.writeRaw("{\"lastName\":\"", 13);
66
encode_((com.jsoniter.demo.User)obj, stream);
7-
stream.write('}');
7+
stream.write((byte)'}');
88
}
99
public static void encode_(com.jsoniter.demo.User obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
10-
com.jsoniter.output.CodegenAccess.writeStringWithoutQuote((java.lang.String)obj.firstName, stream);
11-
stream.writeRaw("\",\"lastName\":\"", 14);
1210
com.jsoniter.output.CodegenAccess.writeStringWithoutQuote((java.lang.String)obj.lastName, stream);
11+
stream.writeRaw("\",\"firstName\":\"", 15);
12+
com.jsoniter.output.CodegenAccess.writeStringWithoutQuote((java.lang.String)obj.firstName, stream);
1313
stream.writeRaw("\",\"score\":", 10);
1414
stream.writeVal((int)obj.score);
1515
}

demo/src/main/java/encoder/int_array.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
public class int_array extends com.jsoniter.spi.EmptyEncoder {
33
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
44
if (obj == null) { stream.writeNull(); return; }
5-
stream.write('[');
5+
stream.write((byte)'[');
66
encode_((int[])obj, stream);
7-
stream.write(']');
7+
stream.write((byte)']');
88
}
99
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
1010
int[] arr = (int[])obj;

demo/src/main/java/encoder/java/util/List_com/jsoniter/demo/User.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
public class User extends com.jsoniter.spi.EmptyEncoder {
33
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
44
if (obj == null) { stream.writeNull(); return; }
5-
stream.write('[');
5+
stream.write((byte)'[');
66
encode_((java.util.List)obj, stream);
7-
stream.write(']');
7+
stream.write((byte)']');
88
}
99
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
1010
java.util.List list = (java.util.List)obj;
1111
int size = list.size();
1212
if (size == 0) { return; }
1313
java.lang.Object e = list.get(0);
1414
if (e == null) { stream.writeNull(); } else {
15-
stream.writeRaw("{\"firstName\":\"", 14);
15+
stream.writeRaw("{\"lastName\":\"", 13);
1616
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)e, stream);
17-
stream.write('}');
17+
stream.write((byte)'}');
1818
}
1919
for (int i = 1; i < size; i++) {
2020
stream.write(',');
2121
e = list.get(i);
2222
if (e == null) { stream.writeNull(); } else {
23-
stream.writeRaw("{\"firstName\":\"", 14);
23+
stream.writeRaw("{\"lastName\":\"", 13);
2424
encoder.com.jsoniter.demo.User.encode_((com.jsoniter.demo.User)e, stream);
25-
stream.write('}');
25+
stream.write((byte)'}');
2626
}
2727
}
2828
}

demo/src/main/java/encoder/java/util/List_java/lang/Integer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
public class Integer extends com.jsoniter.spi.EmptyEncoder {
33
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
44
if (obj == null) { stream.writeNull(); return; }
5-
stream.write('[');
5+
stream.write((byte)'[');
66
encode_((java.util.List)obj, stream);
7-
stream.write(']');
7+
stream.write((byte)']');
88
}
99
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
1010
java.util.List list = (java.util.List)obj;

demo/src/main/java/encoder/java/util/Map_java/lang/String_java/lang/Object.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
public class Object extends com.jsoniter.spi.EmptyEncoder {
33
public void encode(Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
44
if (obj == null) { stream.writeNull(); return; }
5-
stream.write('{');
5+
stream.write((byte)'{');
66
encode_((java.util.Map)obj, stream);
7-
stream.write('}');
7+
stream.write((byte)'}');
88
}
99
public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream stream) throws java.io.IOException {
1010
if (obj == null) { stream.writeNull(); return; }
@@ -13,13 +13,13 @@ public static void encode_(java.lang.Object obj, com.jsoniter.output.JsonStream
1313
if(!iter.hasNext()) { return; }
1414
java.util.Map.Entry entry = (java.util.Map.Entry)iter.next();
1515
stream.writeVal((String)entry.getKey());
16-
stream.write(':');
16+
stream.write((byte)':');
1717
if (entry.getValue() == null) { stream.writeNull(); } else {
1818
stream.writeVal((java.lang.Object)entry.getValue());
1919
}
2020
while(iter.hasNext()) {
2121
entry = (java.util.Map.Entry)iter.next();
22-
stream.write(',');
22+
stream.write((byte)',');
2323
stream.writeObjectField((String)entry.getKey());
2424
if (entry.getValue() == null) { stream.writeNull(); } else {
2525
stream.writeVal((java.lang.Object)entry.getValue());
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.dslplatform.json;
2+
3+
public class CustomJsonReader extends JsonReader {
4+
public CustomJsonReader(byte[] buffer) {
5+
super(buffer, null);
6+
}
7+
public void reset() {
8+
super.reset(length());
9+
}
10+
}

demo/src/test/java/com/jsoniter/demo/ReadString.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.jsoniter.demo;
22

33

4+
import com.dslplatform.json.CustomJsonReader;
5+
import com.dslplatform.json.JsonReader;
46
import com.jsoniter.JsonIterator;
57
import org.junit.Test;
68
import org.openjdk.jmh.Main;
@@ -16,6 +18,7 @@ public class ReadString {
1618

1719
private JsonIterator jsonIterator;
1820
private byte[] input;
21+
private CustomJsonReader customJsonReader;
1922

2023
public static void main(String[] args) throws Exception {
2124
Main.main(new String[]{
@@ -34,12 +37,20 @@ public void test() throws IOException {
3437
@Setup(Level.Trial)
3538
public void benchSetup(BenchmarkParams params) {
3639
jsonIterator = new JsonIterator();
37-
input = "\"hello world\"".getBytes();
40+
input = "\"hello world hello world\"".getBytes();
41+
customJsonReader = new CustomJsonReader(input);
3842
}
3943

4044
@Benchmark
4145
public void jsoniter(Blackhole bh) throws IOException {
4246
jsonIterator.reset(input);
4347
bh.consume(jsonIterator.readString());
4448
}
49+
50+
@Benchmark
51+
public void dsljson(Blackhole bh) throws IOException {
52+
customJsonReader.reset();
53+
customJsonReader.read();
54+
bh.consume(customJsonReader.readString());
55+
}
4556
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.jsoniter.demo.object_with_1_double_field;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
6+
import org.openjdk.jmh.Main;
7+
import org.openjdk.jmh.annotations.*;
8+
import org.openjdk.jmh.infra.BenchmarkParams;
9+
import org.openjdk.jmh.infra.Blackhole;
10+
import org.openjdk.jmh.runner.RunnerException;
11+
12+
import java.io.ByteArrayOutputStream;
13+
import java.io.IOException;
14+
15+
/*
16+
Benchmark Mode Cnt Score Error Units
17+
BenchJackson.deser thrpt 5 5822021.435 ± 208030.778 ops/s
18+
BenchJackson.ser thrpt 5 5359413.928 ± 180612.520 ops/s
19+
*/
20+
@State(Scope.Thread)
21+
public class BenchJackson {
22+
23+
private ObjectMapper objectMapper;
24+
private TypeReference<TestObject> typeReference;
25+
private ByteArrayOutputStream byteArrayOutputStream;
26+
private byte[] testJSON;
27+
private TestObject testObject;
28+
29+
@Setup(Level.Trial)
30+
public void benchSetup(BenchmarkParams params) {
31+
objectMapper = new ObjectMapper();
32+
objectMapper.registerModule(new AfterburnerModule());
33+
typeReference = new TypeReference<TestObject>() {
34+
};
35+
byteArrayOutputStream = new ByteArrayOutputStream();
36+
testJSON = TestObject.createTestJSON();
37+
testObject = TestObject.createTestObject();
38+
}
39+
40+
@Benchmark
41+
public void ser(Blackhole bh) throws IOException {
42+
byteArrayOutputStream.reset();
43+
objectMapper.writeValue(byteArrayOutputStream, testObject);
44+
bh.consume(byteArrayOutputStream);
45+
}
46+
47+
48+
@Benchmark
49+
public void deser(Blackhole bh) throws IOException {
50+
bh.consume(objectMapper.readValue(testJSON, typeReference));
51+
}
52+
53+
public static void main(String[] args) throws IOException, RunnerException {
54+
Main.main(new String[]{
55+
"object_with_1_double_field.BenchJackson",
56+
"-i", "5",
57+
"-wi", "5",
58+
"-f", "1",
59+
});
60+
}
61+
}

0 commit comments

Comments
 (0)