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

8.9 KiB
Raw Permalink Blame History

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

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性能比较

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

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