json-serialization-benchmarking
json-serialization-benchmarking copied to clipboard
Add jackson benchmarks
trafficstars
Resolves #17
Results
The benchmarks ran on an emulator (which might be less than ideal, but I don't have a rooted device such that microbenchmark can lock cpu freq) on a MacBook Pro (16-inch, 2019) / 2.6 GHz 6-Core Intel Core i7 / 32 GB 2667 MHz DDR4
3,780,714 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
5,937,129 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
3,782,060 ns AndroidBenchmark.jackson_string_toJson[minified=true]
1,891,089 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
5,432,586 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
4,092,667 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
1,702,849 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
3,549,857 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
3,471,514 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
5,298,514 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
3,362,756 ns AndroidBenchmark.jackson_string_toJson[minified=false]
2,116,143 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
5,317,808 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
4,407,135 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
2,260,745 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
3,945,124 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
Full Result Set
1,994,053 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=true]
1,535,701 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=true]
2,106,392 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=true]
1,762,855 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=true]
2,347,367 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=true]
3,780,714 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
34,711,139 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=true]
2,104,227 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=true]
3,037,378 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=true]
1,263,595 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=true]
2,335,807 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=true]
5,937,129 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
3,218,318 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=true]
2,216,778 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=true]
2,164,819 ns AndroidBenchmark.kserializer_string_fromJson[minified=true]
3,782,060 ns AndroidBenchmark.jackson_string_toJson[minified=true]
3,080,469 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=true]
1,978,509 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=true]
1,744,364 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=true]
2,099,764 ns AndroidBenchmark.kserializer_string_toJson[minified=true]
3,788,587 ns AndroidBenchmark.gson_reflective_string_toJson[minified=true]
1,221,013 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=true]
Timed out waiting for process (dev.zacsweers.jsonserialization.android.test) to appear on Thekla [emulator-5554].
2,731,075 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=true]
1,891,089 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
5,432,586 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
4,092,667 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
1,702,849 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
2,717,578 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=true]
3,549,857 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
2,010,287 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=true]
2,085,709 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=false]
1,643,141 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=false]
2,684,480 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=false]
1,741,285 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=false]
2,951,020 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=false]
3,471,514 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
31,882,056 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=false]
2,735,238 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=false]
3,555,916 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=false]
1,184,090 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=false]
3,021,006 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=false]
5,298,514 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
3,866,866 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=false]
2,150,292 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=false]
2,143,342 ns AndroidBenchmark.kserializer_string_fromJson[minified=false]
3,362,756 ns AndroidBenchmark.jackson_string_toJson[minified=false]
3,029,687 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=false]
1,970,959 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=false]
1,751,465 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=false]
2,187,586 ns AndroidBenchmark.kserializer_string_toJson[minified=false]
3,750,312 ns AndroidBenchmark.gson_reflective_string_toJson[minified=false]
1,198,145 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=false]
4,890,404 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=false]
2,116,143 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
5,317,808 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
4,407,135 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
2,260,745 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
2,764,794 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=false]
3,945,124 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
2,285,186 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=false]
Here are results on a non-root, charging Pixel 3 (Android-12).
The discrepancy between Jackson on a real device v emulator is interesting. The rest of the benchmarks didn't seem to be proportionally impacted as much.
Full Result Set
5,140,105 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=true]
4,365,156 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=true]
5,875,158 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=true]
5,476,719 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=true]
6,808,386 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=true]
11,454,793 ns AndroidBenchmark.jackson_buffer_toJson[minified=true]
135,394,754 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=true]
6,022,031 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=true]
7,483,907 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=true]
4,149,116 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=true]
7,005,782 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=true]
17,243,439 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=true]
8,432,917 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=true]
6,313,387 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=true]
5,300,157 ns AndroidBenchmark.kserializer_string_fromJson[minified=true]
9,869,115 ns AndroidBenchmark.jackson_string_toJson[minified=true]
7,925,522 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=true]
5,814,479 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=true]
5,507,397 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=true]
6,049,688 ns AndroidBenchmark.kserializer_string_toJson[minified=true]
9,154,793 ns AndroidBenchmark.gson_reflective_string_toJson[minified=true]
4,007,917 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=true]
7,756,199 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=true]
Timed out waiting for process (dev.zacsweers.jsonserialization.android.test) to appear on google-pixel_3-89WX0J818.
5,478,490 ns AndroidBenchmark.jackson_buffer_fromJson[minified=true]
15,323,022 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=true]
9,205,106 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=true]
4,249,636 ns AndroidBenchmark.jackson_string_fromJson[minified=true]
7,741,354 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=true]
7,978,177 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=true]
5,906,511 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=true]
5,743,386 ns AndroidBenchmark.gson_reflective_string_fromJson[minified=false]
4,818,647 ns AndroidBenchmark.gson_autovalue_string_fromJson[minified=false]
7,954,168 ns AndroidBenchmark.moshi_autovalue_buffer_fromJson[minified=false]
5,450,001 ns AndroidBenchmark.moshi_autovalue_string_toJson[minified=false]
9,393,335 ns AndroidBenchmark.moshi_autovalue_string_fromJson[minified=false]
10,073,544 ns AndroidBenchmark.jackson_buffer_toJson[minified=false]
135,032,357 ns AndroidBenchmark.gson_autovalue_buffer_toJson[minified=false]
8,091,615 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_fromJson[minified=false]
9,587,865 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_fromJson[minified=false]
4,024,012 ns AndroidBenchmark.moshi_kotlin_codegen_buffer_toJson[minified=false]
9,467,136 ns AndroidBenchmark.moshi_kotlin_codegen_string_fromJson[minified=false]
15,697,814 ns AndroidBenchmark.jackson_kotlin_buffer_toJson[minified=false]
10,957,814 ns AndroidBenchmark.moshi_kotlin_reflective_string_fromJson[minified=false]
6,399,532 ns AndroidBenchmark.moshi_kotlin_reflective_buffer_toJson[minified=false]
6,012,397 ns AndroidBenchmark.kserializer_string_fromJson[minified=false]
9,168,177 ns AndroidBenchmark.jackson_string_toJson[minified=false]
7,953,074 ns AndroidBenchmark.gson_autovalue_string_toJson[minified=false]
5,851,928 ns AndroidBenchmark.moshi_reflective_string_toJson[minified=false]
5,428,802 ns AndroidBenchmark.moshi_kotlin_codegen_string_toJson[minified=false]
6,080,574 ns AndroidBenchmark.kserializer_string_toJson[minified=false]
9,179,793 ns AndroidBenchmark.gson_reflective_string_toJson[minified=false]
3,945,521 ns AndroidBenchmark.moshi_autovalue_buffer_toJson[minified=false]
10,199,011 ns AndroidBenchmark.moshi_reflective_string_fromJson[minified=false]
6,353,700 ns AndroidBenchmark.jackson_buffer_fromJson[minified=false]
14,057,918 ns AndroidBenchmark.jackson_kotlin_string_toJson[minified=false]
10,350,626 ns AndroidBenchmark.jackson_kotlin_buffer_fromJson[minified=false]
4,884,428 ns AndroidBenchmark.jackson_string_fromJson[minified=false]
7,904,584 ns AndroidBenchmark.moshi_kotlin_reflective_string_toJson[minified=false]
8,568,751 ns AndroidBenchmark.jackson_kotlin_string_fromJson[minified=false]
6,683,281 ns AndroidBenchmark.gson_autovalue_buffer_fromJson[minified=false]