fastjson2/docs/benchmark/benchmark_2.0.7_aarch64.md

286 lines
12 KiB
Markdown
Raw Permalink Normal View History

2022-06-12 17:43:29 +08:00
# 1. 测试环境
2022-06-11 10:19:42 +08:00
* MacOS Monterey Version 12.4(21F79)
* Chip Apple M1 Max
* Memory 64 GB
2022-06-12 17:43:29 +08:00
## 1.1 JDK
2022-06-11 10:19:42 +08:00
* JDK 8 zulu8.60.0.21-ca-jdk8.0.322-macosx_aarch64
* JDK 11 zulu11.52.13-ca-jdk11.0.13-macosx_aarch64
* JDK 17 zulu17.32.13-ca-jdk17.0.2-macosx_aarch64
2022-06-12 17:43:29 +08:00
* JMH 1.35
2022-06-11 10:19:42 +08:00
2022-06-12 17:43:29 +08:00
## 1.2 JSON库的版本
2022-06-11 10:19:42 +08:00
* Jackson 2.13.3
* FASTJSON 1.2.83
2022-06-12 17:43:29 +08:00
* [FASTJSON 2.0.7](https://github.com/alibaba/fastjson2/releases/tag/2.0.7)
* Hessian 4.0.66
2022-06-11 10:19:42 +08:00
2022-06-12 17:43:29 +08:00
## 1.3 测试代码
* https://github.com/alibaba/fastjson2/tree/2.0.7/benchmark/src/main/java/com/alibaba/fastjson2/benchmark/eishay
# 2. Parse String to Tree
2022-06-11 10:19:42 +08:00
这个场景是将字符串解析为JSONObject或者HashMap不涉及绑定JavaBean对象。
## JDK 8
JDK 8环境下FASTJSON2比FASTJSON1快96.46%比Jackson快74.59%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson1 thrpt 5 689.334 ± 4.869 ops/ms
EishayParseTreeString.fastjson2 thrpt 5 1354.274 ± 5.955 ops/ms
EishayParseTreeString.jackson thrpt 5 775.679 ± 3.524 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON2比FASTJSON1快89.11%比Jackson快45.49%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson1 thrpt 5 583.254 ± 3.813 ops/ms
EishayParseTreeString.fastjson2 thrpt 5 1103.024 ± 2.497 ops/ms
EishayParseTreeString.jackson thrpt 5 758.132 ± 4.719 ops/ms
```
## JDK 17
JDK 11环境下FASTJSON2比FASTJSON1快48.40%比Jackson快60.37%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeString.fastjson1 thrpt 5 868.541 ± 2.946 ops/ms
EishayParseTreeString.fastjson2 thrpt 5 1289.000 ± 11.511 ops/ms
EishayParseTreeString.jackson thrpt 5 803.867 ± 4.779 ops/ms
```
2022-06-12 17:43:29 +08:00
# 3. Pars String to Java Bean
2022-06-11 10:19:42 +08:00
这个场景是将一个没有格式化的JSON字符串反序列化为JavaBean对象是最常用的场景这个是fastjson1的强项。
## JDK 8
JDK 8环境下FASTJSON2比FASTJSON1快18.5%比Jackson快134.6%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseString.fastjson1 thrpt 5 1539.912 ± 13.148 ops/ms
EishayParseString.fastjson2 thrpt 5 1825.665 ± 9.912 ops/ms
EishayParseString.jackson thrpt 5 777.996 ± 3.173 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快38%比Jackson快170.6%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseString.fastjson1 thrpt 5 1483.601 ± 7.487 ops/ms
EishayParseString.fastjson2 thrpt 5 2047.763 ± 18.252 ops/ms
EishayParseString.jackson thrpt 5 756.721 ± 3.526 ops/ms
```
## JDK 17
JDK 17环境下FASTJSON 2和FASTJSON 1性能很接近比Jackson快172.8%。 这个场景FASTJSON 2没有比FASTJSON 1性能接近的原因有两个
1. 这个FASTJSON 1的最强场景
2. 由于JDK 17的一些限制使得在不加特别参数时FASTJSON 2对String.value字段直接访问的优化手段无法使用限制了性能进一步提升
```java
Benchmark Mode Cnt Score Error Units
EishayParseString.fastjson1 thrpt 5 2074.488 ± 7.897 ops/ms
EishayParseString.fastjson2 thrpt 5 2089.508 ± 4.307 ops/ms
EishayParseString.jackson thrpt 5 765.751 ± 6.288 ops/ms
```
2022-06-12 17:43:29 +08:00
# 4. Parse UTF8 Bytes to Java Bean
2022-06-11 10:19:42 +08:00
将UTF8编码的Bytes反序列化为JavaBean这个场景在网络传输和缓存场景常用
2022-06-12 17:43:29 +08:00
## JDK8
2022-06-11 10:19:42 +08:00
JDK 8环境下FASTJSON 2比FASTJSON 1快20.96%比Jackson快65.03%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseUTF8Bytes.fastjson1 thrpt 5 1444.714 ± 11.622 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 1747.637 ± 13.112 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 1058.978 ± 9.580 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快39.82%比Jackson快96.81%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseUTF8Bytes.fastjson1 thrpt 5 1338.422 ± 10.127 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 1871.489 ± 42.011 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 950.886 ± 10.520 ops/ms
```
## JDK 17
JDK 17环境下FASTJSON 2比FASTJSON 1快8.92%比Jackson快98.07%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseUTF8Bytes.fastjson1 thrpt 5 1699.103 ± 4.741 ops/ms
EishayParseUTF8Bytes.fastjson2 thrpt 5 1850.714 ± 10.967 ops/ms
EishayParseUTF8Bytes.jackson thrpt 5 934.355 ± 10.108 ops/ms
```
2022-06-12 17:43:29 +08:00
# 5. Parse UTF8 Bytes to JSONObject
2022-06-11 10:19:42 +08:00
将带有空格缩进的格式化的UTF8编码的Bytes反序列化为JSONObject/HashMap不涉及绑定JavaBean对象。
## JDK 8
JDK 8环境下FASTJSON 2比FASTJSON 1快64.86%比Jackson快21.24%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 667.564 ± 4.341 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 1100.551 ± 5.987 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 907.719 ± 4.987 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快84.03%比Jackson快14%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 540.954 ± 1.934 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 995.549 ± 14.924 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 873.258 ± 12.942 ops/ms
```
## JDK 17
JDK 11环境下FASTJSON 2比FASTJSON 1快39.62%比Jackson快6.47%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeUTF8Bytes.fastjson1 thrpt 5 737.135 ± 5.644 ops/ms
EishayParseTreeUTF8Bytes.fastjson2 thrpt 5 1029.244 ± 3.325 ops/ms
EishayParseTreeUTF8Bytes.jackson thrpt 5 966.648 ± 18.829 ops/ms
```
2022-06-12 17:43:29 +08:00
# 6. Parse Pretty UTF8 Bytes to Java Bean
2022-06-11 10:19:42 +08:00
将带有空格缩进的格式化的UTF8编码的Bytes反序列化为JavaBean对象。
## JDK 8
JDK 8环境下FASTJSON 2比FASTJSON 1快61.62%比Jackson快43.83%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeStringPretty.fastjson1 thrpt 5 639.783 ± 4.227 ops/ms
EishayParseTreeStringPretty.fastjson2 thrpt 5 1031.769 ± 6.524 ops/ms
EishayParseTreeStringPretty.jackson thrpt 5 717.353 ± 3.492 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快99.12%比Jackson快49.51%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeStringPretty.fastjson1 thrpt 5 485.915 ± 1.206 ops/ms
EishayParseTreeStringPretty.fastjson2 thrpt 5 967.587 ± 3.667 ops/ms
EishayParseTreeStringPretty.jackson thrpt 5 647.169 ± 74.370 ops/ms
```
## JDK 17
JDK 17环境下FASTJSON 2比FASTJSON 1快52.29%比Jackson快54.94%。
```java
Benchmark Mode Cnt Score Error Units
EishayParseTreeStringPretty.fastjson1 thrpt 5 734.173 ± 4.344 ops/ms
EishayParseTreeStringPretty.fastjson2 thrpt 5 1132.815 ± 111.454 ops/ms
EishayParseTreeStringPretty.jackson thrpt 5 731.110 ± 4.889 ops/ms
```
2022-06-12 17:43:29 +08:00
# 7. Write JavaBean to String
2022-06-11 10:19:42 +08:00
这个场景是将JavaBean对象序列化为字符串
## JDK 8
JDK 11环境下FASTJSON 2比FASTJSON 1快153.68%比Jackson快68.52%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson1 thrpt 5 1116.513 ± 9.060 ops/ms
EishayWriteString.fastjson2 thrpt 5 2832.451 ± 32.996 ops/ms
EishayWriteString.jackson thrpt 5 1680.735 ± 20.092 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快160%比Jackson快62.99%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson1 thrpt 5 1074.701 ± 6.658 ops/ms
EishayWriteString.fastjson2 thrpt 5 2794.764 ± 23.689 ops/ms
EishayWriteString.jackson thrpt 5 1714.676 ± 20.331 ops/ms
```
## JDK 17
JDK 11环境下FASTJSON 2比FASTJSON 1快124.52%比Jackson快61.14%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteString.fastjson1 thrpt 5 1247.903 ± 8.185 ops/ms
EishayWriteString.fastjson2 thrpt 5 2801.838 ± 25.323 ops/ms
EishayWriteString.jackson thrpt 5 1738.689 ± 10.372 ops/ms
```
2022-06-12 17:43:29 +08:00
# 8. Write JavaBean to UTF8 Bytes
2022-06-11 10:19:42 +08:00
这个场景是将JavaBean对象序列化为UTF8编码的Bytes
## JDK 8
JDK 8环境下FASTJSON 2比FASTJSON 1快78.42%比Jackson快81.13%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteUTF8Bytes.fastjson1 thrpt 5 976.186 ± 5.080 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 2717.983 ± 18.739 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1500.564 ± 12.812 ops/ms
```
## JDK 11
JDK 11环境下FASTJSON 2比FASTJSON 1快201.67%比Jackson快110.46%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteUTF8Bytes.fastjson1 thrpt 5 961.756 ± 9.957 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 2901.339 ± 9.204 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1378.505 ± 14.243 ops/ms
```
## JDK 17
JDK 17环境下FASTJSON 2比FASTJSON 1快207.22%比Jackson快84.05%。
```java
Benchmark Mode Cnt Score Error Units
EishayWriteUTF8Bytes.fastjson1 thrpt 5 952.709 ± 8.649 ops/ms
EishayWriteUTF8Bytes.fastjson2 thrpt 5 2926.923 ± 5.526 ops/ms
EishayWriteUTF8Bytes.jackson thrpt 5 1590.268 ± 12.166 ops/ms
```
2022-06-12 17:43:29 +08:00
# 9. Write JavaBean to Binary
这个是序列化的场景将JavaBean序列化为二进制格式用于缓存和网络传输。这个场景可以看出JSONB的极速性能。
2022-06-11 10:19:42 +08:00
## JDK 8
2022-06-12 17:43:29 +08:00
FASTJSON2 JSONB比快425.14%比java内置序列化快672.31%
2022-06-11 10:19:42 +08:00
```java
Benchmark Mode Cnt Score Error Units
EishayWriteBinary.fastjson2JSONB thrpt 5 3355.913 ± 22.156 ops/ms
EishayWriteBinary.fastjson2UTF8Bytes thrpt 5 2719.407 ± 9.733 ops/ms
EishayWriteBinary.hessian thrpt 5 639.043 ± 5.000 ops/ms
EishayWriteBinary.javaSerialize thrpt 5 434.528 ± 2.837 ops/ms
```
## JDK 11
```java
Benchmark Mode Cnt Score Error Units
EishayWriteBinary.fastjson2JSONB thrpt 5 4608.308 ± 54.115 ops/ms
EishayWriteBinary.fastjson2UTF8Bytes thrpt 5 2902.881 ± 15.651 ops/ms
EishayWriteBinary.hessian thrpt 5 727.097 ± 21.115 ops/ms
EishayWriteBinary.javaSerialize thrpt 5 447.319 ± 0.102 ops/ms
```
## JDK 17
```java
Benchmark Mode Cnt Score Error Units
EishayWriteBinary.fastjson2JSONB thrpt 5 4489.651 ± 15.350 ops/ms
EishayWriteBinary.fastjson2UTF8Bytes thrpt 5 2925.373 ± 9.413 ops/ms
EishayWriteBinary.hessian thrpt 5 711.496 ± 4.984 ops/ms
EishayWriteBinary.javaSerialize thrpt 5 453.639 ± 4.727 ops/ms
```
2022-06-12 17:43:29 +08:00
# 10. Read Binary to JavaBean
这个是序列化的场景将二进制的byte数组反序列化为JavaBean用于缓存和网络传输。这个场景可以看出JSONB的极速性能。
2022-06-11 10:19:42 +08:00
## JDK 8
2022-06-12 17:43:29 +08:00
FASTJSON2 JSONB比快731.28%比java内置序列化快5139.68%
2022-06-11 10:19:42 +08:00
```java
Benchmark Mode Cnt Score Error Units
EishayParseBinary.fastjson2JSONB thrpt 5 3130.576 ± 23.829 ops/ms
EishayParseBinary.fastjson2UTF8Bytes thrpt 5 1775.479 ± 9.215 ops/ms
EishayParseBinary.hessian thrpt 5 376.593 ± 1.423 ops/ms
EishayParseBinary.javaSerialize thrpt 5 60.898 ± 0.200 ops/ms
```
## JDK 11
```java
Benchmark Mode Cnt Score Error Units
EishayParseBinary.fastjson2JSONB thrpt 5 2443.326 ± 11.017 ops/ms
EishayParseBinary.fastjson2UTF8Bytes thrpt 5 1889.431 ± 15.771 ops/ms
EishayParseBinary.hessian thrpt 5 361.239 ± 2.726 ops/ms
EishayParseBinary.javaSerialize thrpt 5 61.553 ± 0.097 ops/ms
```
2022-06-12 17:43:29 +08:00
## JDK 17
2022-06-11 10:19:42 +08:00
```java
Benchmark Mode Cnt Score Error Units
EishayParseBinary.fastjson2JSONB thrpt 5 2525.308 ± 19.115 ops/ms
EishayParseBinary.fastjson2UTF8Bytes thrpt 5 1770.374 ± 5.918 ops/ms
EishayParseBinary.hessian thrpt 5 361.265 ± 1.357 ops/ms
EishayParseBinary.javaSerialize thrpt 5 71.450 ± 0.625 ops/ms
```