# benchmarks-java-json **Repository Path**: xyzwps/benchmarks-java-json ## Basic Information - **Project Name**: benchmarks-java-json - **Description**: 常见 Java JSON 库简单跑分 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Benchmarks of Java JSON Libraries 选了几个库(按字母表顺序排列): - [**Alibaba FastJSON**](https://github.com/alibaba/fastjson) - 阿里出品,争议颇多 - [**Apache Johnzon**](https://github.com/apache/johnzon) - Apache 顶级项目。它是 JSON-P 1.1 规范 (JSR-353) 和 JSON-B 1.0 规范 (JSR-367) 的一个完整实现。[戳这里去官网页面](http://johnzon.apache.org/) 。官网给的用法示例,和 JSON-B API 差别还是比较大的。 - [**Eclipse Yasson**](https://github.com/eclipse-ee4j/yasson) - Eclipse 出品。它是 JSON-B (JSR-367) 的官方实现。 - [**Google Gson**](https://github.com/google/gson) - 谷歌出品 - [**Jackson**](https://github.com/FasterXML/jackson) - Spring 默认 JSON 库 另外, 1. 本次跑分用例比较简单,而且只关心用时而不关心内存占用 1. 没有把 [**Genson**](http://genson.io) —— 用于 Java 和 Scala 的、强大易用的 JSON 库 —— 加进来。不知道这货搞了什么骚操作,用了之后,Yasson 和 Johnzon 都起不来了。 1. 在测试时,这几个库都开了把 Date 转为时间戳的选项。 1. 代码写成时,依赖 Java 14(感觉 Java 11 也可以跑,没试) ## 跑分 ### 使用命令 要有网,因为命令下载 Gradle。 在 Linux 或 Mac 下: ```bash ./gradlew run ``` 在 Windows 下: ```bash ./gradlew.bat run ``` ### 在 IDE 中跑 把 Gradle 导入到 IDE 中。运行 `Measure` 类。 ### 某次跑分结果 ```text ╭──────────┬─────────┬───────────╮ │ lib │ parse │ stringify │ ├──────────┼─────────┼───────────┤ │ gson │ 750ms │ 663ms │ ├──────────┼─────────┼───────────┤ │ fastJson │ 537ms │ 283ms │ ├──────────┼─────────┼───────────┤ │ jackson │ 695ms │ 435ms │ ├──────────┼─────────┼───────────┤ │ johnzon │ 1377ms │ 666ms │ ├──────────┼─────────┼───────────┤ │ yasson │ 17669ms │ 1066ms │ ╰──────────┴─────────┴───────────╯ ``` 从这几个结果中,大致可以看出: 1. FastJSON 就是快,尤其是序列化时 2. Jackson 虽然比 FastJSON 慢,但是慢得并不多 3. Gson 比 Jackson 稍慢一点 4. Johnzon 作为 Apache 顶级项目,这成绩也算不错了 5. Yasson 是官方实现,表现最操蛋 结合 FastJSON 这货经常性爆出安全漏洞这个情况,Spring 官方选择 Jackson 作为默认 JSON 库是很明智的选择。 ## 其他 没有使用 JMH。使用 Gradle JMH 插件跑了几十分钟都没跑完,太扯了。可能我使用的姿势不对。总之,不用。