fastjson2/docs/benchmark_cn.md
shaojin.wensj a8e1e0a2c7 add doc
2022-05-21 17:57:59 +08:00

174 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. Eishay测试
```
create ser deser total size +dfl
json-array/fastjson/databind 30 455 414 869 284 171
protobuf 159 601 319 919 242 152
cbor/jackson+afterburner/databind 29 565 753 1318 398 251
json/fastjson/databind 29 659 707 1366 489 271
json/jackson+afterburner/databind 28 663 837 1500 488 271
cbor/jackson/databind 30 587 1040 1628 398 251
json/jackson/databind 29 697 1099 1796 488 271
json/gson/databind 28 2091 1803 3893 489 268
hessian 29 2062 2619 4681 504 319
java-built-in 29 2815 15730 18545 892 520
```
* 测试代码 https://github.com/wenshao/jvm-serializers
# 2. 直接JMH性能测试比较
## 2.1 测试环境
* MacBook Pro (16-inch, 2021) MacApple M1 Max, 64GB Memory
* ZuluJDK
## 2.1.1 比较的版本
* Fastjson 2.0.1
* Fastjson 1.2.79
* Jackson 2.12.4
## 2.1.2 JDK版本
* JDK 8 zulu8.60.0.21-ca-jdk8.0.322-macosx_aarch64
* JDK 11 zulu11.54.25-ca-jdk11.0.14.1-macosx_aarch64
* JDK 17 zulu17.32.13-ca-jdk17.0.2-macosx_aarch64
## 2.2 Parse性能比较
* 测试代码 https://github.com/alibaba/fastjson2/blob/2.0.1/core/src/test/java/com/alibaba/fastjson_perf/eishay/EishayParse.java
### 2.2.1 场景介绍及结论
* EishayParseTreeString场景将String解析成JSONObject/JSONArray或者HashMap/ArrayList。在这个场景fastjson2表现出了两倍于fastjson1的性能
* EishayParseString场景将String反序列化为JavaBean对象在这个场景fastjson2相对于fastjson1性能提升了30%的性能。
* EishayParseStringPretty将格式化带空格和换行符缩进的String反序列化为JavaBean对象fastjson2在3.44倍于fastjson1。这个场景在fastjson1中是弱项在fastjson2中采用新解析的算法性能有了非常大提升。
* EishayParseUTF8Bytes将UTF8格式的byte[]反序列化为JavaBean对象
### 2.2.2 MacOS_M1Max_ARM_Zulu_JDK8
```
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson2 thrpt 5 1297.637 ± 14.343 ops/ms
EishayParseTreeString.fastjson1 thrpt 5 649.525 ± 2.845 ops/ms
EishayParseTreeString.jackson thrpt 5 701.278 ± 17.552 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 1059.120 ± 17.679 ops/ms
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 654.592 ± 3.706 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 825.801 ± 3.161 ops/ms
EishayParseString.fastjson2 thrpt 5 2057.589 ± 9.382 ops/ms
EishayParseString.fastjson1 thrpt 5 1588.114 ± 4.540 ops/ms
EishayParseString.jackson thrpt 5 718.630 ± 14.570 ops/ms
EishayParseStringPretty.fastjson2 thrpt 5 1519.731 ± 108.501 ops/ms
EishayParseStringPretty.fastjson1 thrpt 5 441.860 ± 12.675 ops/ms
EishayParseStringPretty.jackson thrpt 5 659.436 ± 14.518 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 1580.093 ± 11.714 ops/ms
EishayParseUTF8Bytes.fastjson1 thrpt 5 1488.098 ± 7.587 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 973.172 ± 4.252 ops/ms
EishayParseUTF8BytesPretty.fastjson2 thrpt 5 1623.723 ± 5.420 ops/ms
EishayParseUTF8BytesPretty.fastjson1 thrpt 5 434.529 ± 1.160 ops/ms
EishayParseUTF8BytesPretty.jackson thrpt 5 861.123 ± 2.946 ops/ms
```
### 2.2.3 MacOS_M1Max_ARM_Zulu_JDK11
```
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson2 thrpt 5 1113.560 ± 2.853 ops/ms
EishayParseTreeString.fastjson1 thrpt 5 602.356 ± 3.139 ops/ms
EishayParseTreeString.jackson thrpt 5 771.085 ± 56.116 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 1076.274 ± 4.028 ops/ms
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 549.811 ± 1.122 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 900.454 ± 4.688 ops/ms
EishayParseString.fastjson2 thrpt 5 2049.978 ± 8.870 ops/ms
EishayParseString.fastjson1 thrpt 5 1498.918 ± 18.825 ops/ms
EishayParseString.jackson thrpt 5 684.231 ± 10.414 ops/ms
EishayParseStringPretty.fastjson2 thrpt 5 1753.379 ± 7.210 ops/ms
EishayParseStringPretty.fastjson1 thrpt 5 379.946 ± 5.317 ops/ms
EishayParseStringPretty.jackson thrpt 5 657.031 ± 7.039 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 2000.253 ± 134.147 ops/ms
EishayParseUTF8Bytes.fastjson1 thrpt 5 1365.798 ± 6.996 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 909.116 ± 2.941 ops/ms
EishayParseUTF8BytesPretty.fastjson2 thrpt 5 1630.228 ± 392.834 ops/ms
EishayParseUTF8BytesPretty.fastjson1 thrpt 5 367.705 ± 0.933 ops/ms
EishayParseUTF8BytesPretty.jackson thrpt 5 883.384 ± 4.067 ops/ms
```
### 2.2.4 MacOS_M1Max_ARM_Zulu_JDK17
```
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson2 thrpt 5 1310.585 ± 4.254 ops/ms
EishayParseTreeString.fastjson1 thrpt 5 843.619 ± 3.138 ops/ms
EishayParseTreeString.jackson thrpt 5 762.283 ± 2.127 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 1043.344 ± 6.560 ops/ms
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 768.128 ± 1.319 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 924.336 ± 3.618 ops/ms
EishayParseString.fastjson2 thrpt 5 2157.744 ± 7.418 ops/ms
EishayParseString.fastjson1 thrpt 5 2105.299 ± 11.867 ops/ms
EishayParseString.jackson thrpt 5 704.006 ± 6.809 ops/ms
EishayParseStringPretty.fastjson2 thrpt 5 1692.457 ± 7.409 ops/ms
EishayParseStringPretty.fastjson1 thrpt 5 499.127 ± 13.863 ops/ms
EishayParseStringPretty.jackson thrpt 5 665.835 ± 11.313 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 1473.672 ± 374.877 ops/ms
EishayParseUTF8Bytes.fastjson1 thrpt 5 1713.926 ± 4.349 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 943.198 ± 3.717 ops/ms
EishayParseUTF8BytesPretty.fastjson2 thrpt 5 1297.958 ± 301.814 ops/ms
EishayParseUTF8BytesPretty.fastjson1 thrpt 5 460.399 ± 2.872 ops/ms
EishayParseUTF8BytesPretty.jackson thrpt 5 832.620 ± 3.739 ops/ms
```
## 2.3 WriteString
* 测试代码 https://github.com/alibaba/fastjson2/blob/2.0.1/core/src/test/java/com/alibaba/fastjson_perf/eishay/EishayWrite.java
### 2.3.1 场景介绍及结论
* EishayWriteString场景将JavaBean对象序列化为字符串。这个场景中fastjson2比fastjson1和jackson分别有164%和85%的性能提升
* EishayWriteUTF8Bytes场景将JavaBean对象序列化为UTF8格式的byte数组。这个场景中fastjson2比fastjson1和jackson分别有185%和93%的性能提升
### 2.3.2 MacOS_M1Max_ARM_Zulu_JDK8
```
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson2 thrpt 5 3076.439 ± 4.692 ops/ms
EishayWriteString.fastjson1 thrpt 5 1162.488 ± 9.076 ops/ms
EishayWriteString.jackson thrpt 5 1664.961 ± 3.204 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 2868.597 ± 5.674 ops/ms
EishayWriteUTF8Bytes.fastjson1 thrpt 5 1005.945 ± 3.602 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1481.545 ± 5.302 ops/ms
```
### 2.3.3 MacOS_M1Max_ARM_Zulu_JDK11
```
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson2 thrpt 5 2816.795 ± 11.322 ops/ms
EishayWriteString.fastjson1 thrpt 5 1063.862 ± 7.016 ops/ms
EishayWriteString.jackson thrpt 5 1617.422 ± 5.465 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 3051.648 ± 8.048 ops/ms
EishayWriteUTF8Bytes.fastjson1 thrpt 5 1033.902 ± 11.964 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1381.491 ± 12.199 ops/ms
```
### 2.3.4 MacOS_M1Max_ARM_Zulu_JDK17
```
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson2 thrpt 5 3064.658 ± 16.216 ops/ms
EishayWriteString.fastjson1 thrpt 5 1250.379 ± 6.057 ops/ms
EishayWriteString.jackson thrpt 5 1682.306 ± 6.945 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 2895.860 ± 78.134 ops/ms
EishayWriteUTF8Bytes.fastjson1 thrpt 5 1015.617 ± 11.698 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1599.584 ± 3.278 ops/ms
```