Skip to content

Commit 3965290

Browse files
committed
improved performance
1 parent 357735a commit 3965290

25 files changed

Lines changed: 702 additions & 267 deletions

benchmark/src/main/java/com/alibaba/fastjson2/benchmark/jjb/ClientsWriteUTF8Bytes.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.alibaba.fastjson2.benchmark.jjb;
22

33
import com.alibaba.fastjson2.JSON;
4+
import com.alibaba.fastjson2.JSONB;
45
import com.alibaba.fastjson2.JSONReader;
6+
import com.alibaba.fastjson2.JSONWriter;
57
import com.dslplatform.json.DslJson;
68
import com.dslplatform.json.runtime.Settings;
79
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -44,6 +46,14 @@ public void fastjson2(Blackhole bh) {
4446
bh.consume(JSON.toJSONBytes(clients));
4547
}
4648

49+
public void jsonb(Blackhole bh) {
50+
bh.consume(JSONB.toBytes(clients));
51+
}
52+
53+
public void jsonb_beanToArray(Blackhole bh) {
54+
bh.consume(JSONB.toBytes(clients, JSONWriter.Feature.BeanToArray, JSONWriter.Feature.FieldBased));
55+
}
56+
4757
public void fastjson2_str(Blackhole bh) {
4858
bh.consume(JSON.toJSONString(clients));
4959
}

benchmark/src/main/java/com/alibaba/fastjson2/benchmark/jjb/UsersWriteUTF8Bytes.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.alibaba.fastjson2.benchmark.jjb;
22

33
import com.alibaba.fastjson2.JSON;
4+
import com.alibaba.fastjson2.JSONB;
45
import com.alibaba.fastjson2.JSONReader;
6+
import com.alibaba.fastjson2.JSONWriter;
57
import com.dslplatform.json.DslJson;
68
import com.dslplatform.json.runtime.Settings;
79
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -44,6 +46,14 @@ public void fastjson2(Blackhole bh) {
4446
bh.consume(JSON.toJSONBytes(users));
4547
}
4648

49+
public void jsonb(Blackhole bh) {
50+
bh.consume(JSONB.toBytes(users));
51+
}
52+
53+
public void jsonb_beanToArray(Blackhole bh) {
54+
bh.consume(JSONB.toBytes(users, JSONWriter.Feature.BeanToArray, JSONWriter.Feature.FieldBased));
55+
}
56+
4757
@Benchmark
4858
public void dsljson(Blackhole bh) throws IOException {
4959
ByteArrayOutputStream bytesOut = bytesOutLocal.get();
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"store": {
3+
"book": [
4+
{
5+
"category": "reference",
6+
"author": "Nigel Rees",
7+
"title": "Sayings of the Century",
8+
"price": 8.95
9+
},
10+
{
11+
"category": "fiction",
12+
"author": "Evelyn Waugh",
13+
"title": "Sword of Honour",
14+
"price": 12.99
15+
},
16+
{
17+
"category": "fiction",
18+
"author": "Herman Melville",
19+
"title": "Moby Dick",
20+
"isbn": "0-553-21311-3",
21+
"price": 8.99
22+
},
23+
{
24+
"category": "fiction",
25+
"author": "J. R. R. Tolkien",
26+
"title": "The Lord of the Rings",
27+
"isbn": "0-395-19395-8",
28+
"price": 22.99
29+
}
30+
],
31+
"bicycle": {
32+
"color": "red",
33+
"price": 19.95
34+
}
35+
},
36+
"expensive": 10
37+
}

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/along/AlongWriteBinaryArrayMappingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static void jsonb() throws Exception {
1515
long millis = System.currentTimeMillis() - start;
1616
System.out.println("AlongWriteBinaryArrayMapping-fastjson2_jsonb millis : " + millis);
1717
// zulu8.68.0.21 :
18-
// zulu11.52.13 : 1477 1480 1470 1389
18+
// zulu11.52.13 : 1477 1480 1470 1389 1361
1919
// zulu17.32.13 : 3126 2888 2736 2564 1674
2020
}
2121
}

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/eishay/EishayWriteBinaryArrayMappingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static void jsonb() throws Exception {
3333
long millis = System.currentTimeMillis() - start;
3434
System.out.println("EishayWriteBinaryArrayMapping-jsonb millis : " + millis);
3535
// zulu8.62.0.19 : 1265
36-
// zulu11.52.13 :
36+
// zulu11.52.13 : 749
3737
// zulu17.32.13 : 804 766
3838
}
3939
}

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/jjb/ClientsWriteUTF8BytesTest.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@
55
public class ClientsWriteUTF8BytesTest {
66
static final ClientsWriteUTF8Bytes benchmark = new ClientsWriteUTF8Bytes();
77

8+
public static void jsonb() {
9+
for (int j = 0; j < 5; j++) {
10+
long start = System.currentTimeMillis();
11+
for (int i = 0; i < 1000 * 1000; ++i) {
12+
benchmark.jsonb(BH);
13+
}
14+
long millis = System.currentTimeMillis() - start;
15+
System.out.println("ClientsWriteUTF8Bytes-jsonb millis : " + millis);
16+
// zulu17.40.19 : 609
17+
// zulu17.40.19_vec :
18+
}
19+
}
20+
21+
public static void jsonb_beanToArray() {
22+
for (int j = 0; j < 5; j++) {
23+
long start = System.currentTimeMillis();
24+
for (int i = 0; i < 1000 * 1000; ++i) {
25+
benchmark.jsonb_beanToArray(BH);
26+
}
27+
long millis = System.currentTimeMillis() - start;
28+
System.out.println("ClientsWriteUTF8Bytes-jsonb_beanToArray millis : " + millis);
29+
// zulu17.40.19 : 311 303
30+
// zulu17.40.19_vec :
31+
}
32+
}
33+
834
public static void fastjson2() {
935
for (int j = 0; j < 5; j++) {
1036
long start = System.currentTimeMillis();
@@ -14,7 +40,7 @@ public static void fastjson2() {
1440
long millis = System.currentTimeMillis() - start;
1541
System.out.println("ClientsWriteUTF8Bytes-fastjson2 millis : " + millis);
1642
// zulu8.70.0.23 : 1533 1493
17-
// zulu17.40.19 : 1419 1361 1356 1356
43+
// zulu17.40.19 : 1419 1361 1356 1356 1317
1844
// zulu17.40.19_vec : 1116
1945
// zulu17.40.19_reflect : 1427
2046
}
@@ -57,7 +83,9 @@ public static void jackson() throws Exception {
5783
}
5884

5985
public static void main(String[] args) throws Exception {
60-
fastjson2();
86+
// fastjson2();
87+
// jsonb();
88+
jsonb_beanToArray();
6189
// fastjson2_str();
6290
// dsljson();
6391
// jackson();

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/jjb/UsersWriteUTF8BytesTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ public static void fastjson2() {
1919
}
2020
}
2121

22+
public static void jsonb_beanToArray() {
23+
for (int j = 0; j < 5; j++) {
24+
long start = System.currentTimeMillis();
25+
for (int i = 0; i < 1000 * 1000; ++i) {
26+
benchmark.jsonb_beanToArray(BH);
27+
}
28+
long millis = System.currentTimeMillis() - start;
29+
System.out.println("ClientsWriteUTF8Bytes-jsonb_beanToArray millis : " + millis);
30+
// zulu17.40.19 : 371
31+
// zulu17.40.19_vec :
32+
}
33+
}
34+
2235
public static void dsljson() throws Exception {
2336
for (int j = 0; j < 5; j++) {
2437
long start = System.currentTimeMillis();
@@ -43,7 +56,8 @@ public static void jackson() throws Exception {
4356
}
4457

4558
public static void main(String[] args) throws Exception {
46-
fastjson2();
59+
// fastjson2();
60+
jsonb_beanToArray();
4761
// dsljson();
4862
// jackson();
4963
}

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/jsonpath/JSONPathMultiTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ public static void extract() throws Exception {
3939
long millis = System.currentTimeMillis() - start;
4040
System.out.println("JSONPathMultiBenchmark-multiEval millis : " + millis);
4141
}
42-
/// zulu8.62.0.19 : 656
42+
/// zulu8.62.0.19 : 656 482
43+
// zulu17.40.19 : 529 469
4344
}
4445

4546
public static void main(String[] args) throws Exception {
46-
extract();
47+
evalMulti();
4748
}
4849
}

benchmark/src/test/java/com/alibaba/fastjson2/benchmark/jsonpath/JSONPathMultiTest2.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public static void evalMulti() throws Exception {
1616
System.out.println("JSONPathMultiBenchmark2-evalMulti millis : " + millis);
1717
}
1818
// zulu8.62.0.19 : 1099
19+
// zulu17.40.19 : 994
1920
}
2021

2122
public static void eval() throws Exception {
@@ -27,7 +28,8 @@ public static void eval() throws Exception {
2728
long millis = System.currentTimeMillis() - start;
2829
System.out.println("JSONPathMultiBenchmark2-eval millis : " + millis);
2930
}
30-
// zulu8.62.0.19 : 1113
31+
// zulu8.62.0.19 : 1113 1163
32+
// zulu17.40.19 : 890
3133
}
3234

3335
public static void extract() throws Exception {
@@ -43,6 +45,7 @@ public static void extract() throws Exception {
4345
}
4446

4547
public static void main(String[] args) throws Exception {
46-
eval();
48+
// eval();
49+
evalMulti();
4750
}
4851
}

core/src/main/java/com/alibaba/fastjson2/JSONPathSingleName.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ public Object eval(Object root) {
5050
}
5151
}
5252
} else {
53-
JSONWriter.Context writerContext = getWriterContext();
54-
ObjectWriter objectWriter = writerContext.getObjectWriter(root.getClass());
53+
ObjectWriter objectWriter = getWriterContext()
54+
.getObjectWriter(
55+
root.getClass()
56+
);
5557
if (objectWriter == null) {
5658
return null;
5759
}
@@ -65,11 +67,9 @@ public Object eval(Object root) {
6567
}
6668

6769
if ((features & Feature.AlwaysReturnList.mask) != 0) {
68-
if (value == null) {
69-
value = new JSONArray();
70-
} else {
71-
value = JSONArray.of(value);
72-
}
70+
value = value == null
71+
? new JSONArray()
72+
: JSONArray.of(value);
7373
}
7474
return value;
7575
}

0 commit comments

Comments
 (0)