[FEATURE] Benchmark 添加Kotlin官方Json库对比
- Dominant language
- Java
- Stars
- 4.4k
- Forks
- 613
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 6
Description
### 请描述您的需求或者改进建议
目前的[benchmark](https://github.com/alibaba/fastjson2/wiki/fastjson_benchmark)没有Kotlin的官方的kotlinx-serialization-json-jvm解析仓库的对比。
### 请描述你建议的实现方案
添加Kotlin官方的的解析库:org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.5.1到benchmark。
测试指标维持当前文档不变,对于Kotlin支持的指标,添加Kotlin作为对比。
#### 附加信息
根据我的个人测试,100万次执行如下数据解析,重复多次,Kotiln解析库速度均快于FastJson2,所以我希望能在当前benchmark中有针对多JDK,多指标的测试对比。
当然Kotlin解析库限制必须使用Kotlin开发,但速度对比仍然颇有意义,尤其是对于使用Kotin的项目来说(而且fastjson2也支持Kotlin):
我的个人配置是:Mac OS 13.5, Zulu JDK20.0.1. 芯片是M1 Max RAM 32GB。
测试库的版本是:
```
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.5.1
com.google.code.gson:gson:2.10.1
com.alibaba.fastjson2:fastjson2-kotlin:2.0.35
```
测试代码如下:
```kotlin
import com.alibaba.fastjson2.to
import com.google.gson.Gson
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlin.system.measureTimeMillis
val jsonString = """{
"doubleQuote": "\"输出双引号\", 中文双引号不用转义“嘿嘿😁”",
"solidus": "\\左边反斜线,右边正斜线\/",
"backSpace": "退格\b退格",
"formFeed": "换页\f换页后",
"linefeed": "换行\n换行后",
"carriageReturn": "回车\r回车后",
"horizontalTab": "制表\t制表后",
"hexString": "\u2021",
"long": -9223300000000000000,
"byte": 2,
"floatNumber": 999999900000000000000000000000,
"doubleNumber": 99999999999999990000000000000000000000000000000000
}""".trimIndent()
// 测试fastjson2的时候,请删除@Serializable注解
@Serializable
data class JsonTest(
val doubleQuote: String,
val solidus: String,
val linefeed: String,
val backSpace: String,
val formFeed: String,
val carriageReturn: String,
val horizontalTab: String,
val hexString: String,
val long: Long,
val byte: Byte,
val floatNumber: Float,
val doubleNumber: Double,
)
fun main() {
measureTimeMillis {
repeat(100_0000) {
kotlinJson()
}
}.also { println("kotlinJson:$it") }
// measureTimeMillis {
// repeat(100_0000) {
// fastJsonParse()
// }
// }.also { println("fastJsonParse:$it") }
// measureTimeMillis {
// repeat(100_0000) {
// gsonParse()
// }
// }.also { println("gsonParse:$it") }
}
fun kotlinJson() {
val jsonTest = Json.decodeFromString(jsonString)
}
val gson = Gson()
fun gsonParse() {
val jsonTest = gson.fromJson(jsonString, JsonTest::class.java)
}
fun fastJsonParse() {
val jsonTest = jsonString.to()
}
```
我目前多次测试下来,100万次典型的耗时数据如下(单位ms):
```
kotlinJson:1424
fastJsonParse:1516
gsonParse:1869
```
以kotlinJson耗时为100%基准话,以上测试结果折算如下:
| Kotlin Json | Fast Json | Gson |
| -- | -- | -- |
| 1424 ms| 1516 ms | 1869 ms |
| 100% | 106% | 131% |
Contributor guide
Research direction
Start with the fastjson benchmark linked in the issue and review how its current comparison and documented metrics are organized. Add kotlinx-serialization-json-jvm 1.5.1 to the benchmark, include Kotlin for the supported metrics, and verify that the existing indicators and multi-JDK comparisons remain consistent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, kotlin
- Domain
- performance
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100