Java 基准测试
系统环境
- Operation System:4.9.151-015.x86_64
- CPU:Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
- Byte Order:Little Endian
- L1d cache: 32K
- L1i cache:32K
- L2 cache: 1024K
- L3 cache: 33792K
JMH 参数
不要跳过 warm up,否则结果不准确。
-f 1 -wi 3 -i 3 -t 1 -w 2s -r 2s -rf cs
基准数据
Struct
Struct 是一个包含 100 个基础类型字段的类:
public class Struct {
public int f1;
public long f2;
public float f3;
public double f4;
// ...
public double f99;
}
Struct2
Struct2 是一个包含 100 个装箱类型字段的类:
public class Struct {
public Integer f1;
public Long f2;
public Float f3;
public Double f4;
// ...
public Double f99;
}
MediaContent
MEDIA_CONTENT 来自 jvm-serializers.
Sample
SAMPLE 来自 kryo benchmark
基准图表
序列化到堆内缓冲区
将数据序列化到 Java 字节数组。
Java schema 一致性序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

Java schema 一致性反序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式反序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

堆外序列化
将数据序列化到堆外内存。
Java schema 一致性序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

Java schema 一致性反序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式反序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

零拷贝序列化
注意:零拷贝序列化只是在序列化阶段避免拷贝;如果将数据发送到其他机器,仍可能发生拷贝。
但如果在同一节点进程间序列化并使用共享内存,且数据在序列化前已位于堆外,那么其他进程可无拷贝读取该缓冲区。
Java 零拷贝序列化到堆内缓冲区

Java 零拷贝序列化到直接缓冲区

基准数据
Java Serialization
| Benchmark | objectType | bufferType | references | Fory | ForyMetaShared | Kryo | Fst | Hession | Jdk | Protostuff |
|---|---|---|---|---|---|---|---|---|---|---|
| serialize | STRUCT | array | False | 7501415.567260 | 558194.100861 | 882178.995727 | 258233.998931 | 155908.244240 | 330975.350403 | |
| serialize | STRUCT | array | True | 6264439.154428 | 557542.628765 | 757753.756691 | 260845.209485 | 151258.539369 | ||
| serialize | STRUCT | directBuffer | False | 9834223.243204 | 1078046.011115 | 807847.663261 | 266481.009225 | 154875.908438 | 340262.650047 | |
| serialize | STRUCT | directBuffer | True | 7551780.823133 | 853350.408656 | 762088.935404 | 261762.594966 | 156404.686214 | ||
| serialize | STRUCT2 | array | False | 3586126.623874 | 325172.969175 | 371762.982661 | 56056.080075 | 36846.049162 | 322563.440433 | |
| serialize | STRUCT2 | array | True | 3306474.506382 | 259863.332448 | 380638.700267 | 60038.879790 | 38183.705811 | ||
| serialize | STRUCT2 | directBuffer | False | 2643155.135327 | 355688.882786 | 365317.705376 | 55924.319442 | 37444.967981 | 325093.716261 | |
| serialize | STRUCT2 | directBuffer | True | 2391110.083108 | 338960.426033 | 370851.880711 | 56674.065604 | 35798.679246 | ||
| serialize | MEDIA_CONTENT | array | False | 3031642.924542 | 730792.521676 | 751892.023189 | 367782.358049 | 137989.198821 | 780618.761219 | |
| serialize | MEDIA_CONTENT | array | True | 2250384.600246 | 445251.084327 | 583859.907758 | 329427.470680 | 140260.668888 | ||
| serialize | MEDIA_CONTENT | directBuffer | False | 2479862.129632 | 608972.517580 | 728001.080250 | 372477.138150 | 138567.623369 | 805941.345157 | |
| serialize | MEDIA_CONTENT | directBuffer | True | 1938527.588331 | 359875.473951 | 595679.580108 | 353376.085025 | 140158.673910 | ||
| serialize | SAMPLE | array | False | 3570966.469087 | 1105365.931217 | 915907.574306 | 220386.502846 | 118374.836631 | 663272.710783 | |
| serialize | SAMPLE | array | True | 1767693.835090 | 734215.482291 | 731869.156376 | 192414.014211 | 119858.140625 | ||
| serialize | SAMPLE | directBuffer | False | 3684487.760591 | 1376560.302168 | 902302.261168 | 220981.308085 | 118273.584257 | 693641.589806 | |
| serialize | SAMPLE | directBuffer | True | 1826456.709478 | 932887.968348 | 723614.066770 | 211949.960255 | 108263.040839 | ||
| serialize_compatible | STRUCT | array | False | 3530406.108869 | 9204444.777172 | 145964.199559 | 258650.663523 | |||
| serialize_compatible | STRUCT | array | True | 3293059.098127 | 7064625.291374 | 136180.832879 | 263564.913879 | |||
| serialize_compatible | STRUCT | directBuffer | False | 2653169.568374 | 11650229.648715 | 106695.800225 | 249221.452137 | |||
| serialize_compatible | STRUCT | directBuffer | True | 2393817.762938 | 8702412.752357 | 106458.212005 | 263623.143601 | |||
| serialize_compatible | STRUCT2 | array | False | 2773368.997680 | 2575824.143864 | 125807.748004 | 58509.125342 | |||
| serialize_compatible | STRUCT2 | array | True | 2564174.550276 | 3543082.528217 | 114983.546343 | 55552.977735 | |||
| serialize_compatible | STRUCT2 | directBuffer | False | 1912402.937879 | 2714748.572248 | 92130.672361 | 58908.567439 | |||
| serialize_compatible | STRUCT2 | directBuffer | True | 1848338.968058 | 1866073.031851 | 88989.724768 | 55524.373547 | |||
| serialize_compatible | MEDIA_CONTENT | array | False | 1679272.036223 | 2992288.235281 | 188911.259146 | 377195.903772 | |||
| serialize_compatible | MEDIA_CONTENT | array | True | 1406736.538716 | 2058738.716953 | 145782.916427 | 351657.879556 | |||
| serialize_compatible | MEDIA_CONTENT | directBuffer | False | 1710680.937387 | 2291443.556971 | 185363.714829 | 371729.727192 | |||
| serialize_compatible | MEDIA_CONTENT | directBuffer | True | 1149999.473994 | 1804349.244125 | 142836.961878 | 343834.954942 | |||
| serialize_compatible | SAMPLE | array | False | 3604596.465625 | 4409055.687063 | 378907.663184 | 234454.975158 | |||
| serialize_compatible | SAMPLE | array | True | 1619648.337293 | 1840705.439334 | 320815.567701 | 206174.173039 | |||
| serialize_compatible | SAMPLE | directBuffer | False | 3484533.218305 | 5043538.364886 | 296102.615094 | 194761.224263 | |||
| serialize_compatible | SAMPLE | directBuffer | True | 1730822.630648 | 1859289.705838 | 276757.392449 | 212840.483308 | |||
| deserialize | STRUCT | array | False | 4595230.434552 | 607750.343557 | 357887.235311 | 84709.108821 | 29603.066599 | 517381.168594 | |
| deserialize | STRUCT | array | True | 4634753.596131 | 552802.227807 | 353480.554035 | 91050.370224 | 29727.744196 | ||
| deserialize | STRUCT | directBuffer | False | 5012002.859236 | 910534.169114 | 352441.597147 | 91151.633583 | 28717.004518 | 538922.947147 | |
| deserialize | STRUCT | directBuffer | True | 4864329.316938 | 914404.107564 | 334574.303484 | 91037.205901 | 29549.998286 | ||
| deserialize | STRUCT2 | array | False | 1126298.359550 | 275984.042401 | 280131.091068 | 69758.767783 | 14888.805111 | 416212.973861 | |
| deserialize | STRUCT2 | array | True | 1046649.083082 | 222710.554833 | 260649.308016 | 68616.029248 | 14034.100664 | ||
| deserialize | STRUCT2 | directBuffer | False | 1117586.457565 | 319247.256793 | 262519.858810 | 66866.108653 | 14652.043788 | 425523.315814 | |
| deserialize | STRUCT2 | directBuffer | True | 1018277.848128 | 249105.828416 | 234973.637096 | 65338.345185 | 14425.886048 | ||
| deserialize | MEDIA_CONTENT | array | False | 2054066.903469 | 577631.234369 | 363455.785182 | 118156.072284 | 38536.250402 | 951662.019963 | |
| deserialize | MEDIA_CONTENT | array | True | 1507767.206603 | 365530.417232 | 304371.728638 | 120016.594171 | 38957.191090 | ||
| deserialize | MEDIA_CONTENT | directBuffer | False | 1502746.028159 | 389473.174523 | 311691.658687 | 111067.942626 | 40512.632076 | 964664.641598 | |
| deserialize | MEDIA_CONTENT | directBuffer | True | 1290593.975753 | 306995.220799 | 251820.171513 | 121820.821260 | 37030.594632 | ||
| deserialize | SAMPLE | array | False | 2069988.624415 | 979173.981159 | 473409.796491 | 119471.518388 | 29309.573998 | 619338.385412 | |
| deserialize | SAMPLE | array | True | 1797942.442313 | 716438.884369 | 428315.502365 | 121106.002978 | 27466.003923 | ||
| deserialize | SAMPLE | directBuffer | False | 2229791.078395 | 983538.936801 | 441027.550809 | 117806.916589 | 28128.457935 | 624804.978534 | |
| deserialize | SAMPLE | directBuffer | True | 1958815.397807 | 762889.302732 | 420523.770904 | 121940.783597 | 28221.014735 | ||
| deserialize_compatible | STRUCT | array | False | 2110335.039275 | 4978833.206806 | 78771.635309 | 88617.486795 | |||
| deserialize_compatible | STRUCT | array | True | 2135681.982674 | 4807963.882520 | 72805.937649 | 90206.654212 | |||
| deserialize_compatible | STRUCT | directBuffer | False | 1596464.248141 | 5149070.657830 | 58574.904225 | 89580.561575 | |||
| deserialize_compatible | STRUCT | directBuffer | True | 1684681.074242 | 5137500.621288 | 60685.320299 | 84407.472531 | |||
| deserialize_compatible | STRUCT2 | array | False | 849507.176263 | 1201998.142474 | 60602.285743 | 63703.763814 | |||
| deserialize_compatible | STRUCT2 | array | True | 815120.319155 | 1058423.614156 | 62729.908347 | 69521.573119 | |||
| deserialize_compatible | STRUCT2 | directBuffer | False | 784036.589363 | 1131212.586953 | 54637.329134 | 69342.030965 | |||
| deserialize_compatible | STRUCT2 | directBuffer | True | 782679.662083 | 1089162.408165 | 51761.569591 | 68542.055543 | |||
| deserialize_compatible | MEDIA_CONTENT | array | False | 1441671.706320 | 2279742.810882 | 180882.860363 | 121619.090797 | |||
| deserialize_compatible | MEDIA_CONTENT | array | True | 1121136.039627 | 1623938.202345 | 154311.211540 | 119994.104050 | |||
| deserialize_compatible | MEDIA_CONTENT | directBuffer | False | 1256034.732514 | 1718098.363961 | 134485.160300 | 107594.474890 | |||
| deserialize_compatible | MEDIA_CONTENT | directBuffer | True | 1054942.751816 | 1333345.536684 | 119311.787329 | 116531.023438 | |||
| deserialize_compatible | SAMPLE | array | False | 2296046.895861 | 2485564.396196 | 255086.928308 | 121898.105768 | |||
| deserialize_compatible | SAMPLE | array | True | 1834139.395757 | 2002938.794909 | 238811.995510 | 121297.485903 | |||
| deserialize_compatible | SAMPLE | directBuffer | False | 2308111.633661 | 2289261.533644 | 201993.787890 | 124044.417439 | |||
| deserialize_compatible | SAMPLE | directBuffer | True | 1820490.585648 | 1927548.827586 | 174534.710870 | 120276.449497 |
Java 零拷贝
| Benchmark | array_size | bufferType | dataType | Fory | Kryo | Fst |
|---|---|---|---|---|---|---|
| serialize | 200 | array | BUFFER | 5123572.914045 | 1985187.977633 | 2400193.220466 |
| serialize | 200 | array | PRIMITIVE_ARRAY | 8297232.942927 | 147342.606262 | 313986.053417 |
| serialize | 200 | directBuffer | BUFFER | 5400346.890126 | 1739454.519770 | 2282550.111756 |
| serialize | 200 | directBuffer | PRIMITIVE_ARRAY | 8335248.350301 | 972683.763633 | 294132.218623 |
| serialize | 1000 | array | BUFFER | 4979590.929127 | 1616159.671230 | 1805557.477810 |
| serialize | 1000 | array | PRIMITIVE_ARRAY | 8772856.921028 | 31395.721514 | 67209.107012 |
| serialize | 1000 | directBuffer | BUFFER | 5376191.775007 | 1377272.568510 | 1644789.427010 |
| serialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 8207563.785251 | 209183.090868 | 66108.014322 |
| serialize | 5000 | array | BUFFER | 5018916.322770 | 711287.533377 | 811029.402136 |
| serialize | 5000 | array | PRIMITIVE_ARRAY | 8027439.580226 | 6248.006967 | 14997.400124 |
| serialize | 5000 | directBuffer | BUFFER | 5330897.682960 | 707092.956534 | 477148.540850 |
| serialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 7695981.988316 | 43565.678616 | 15000.378818 |
| deserialize | 200 | array | BUFFER | 3302149.383135 | 1296284.787720 | 657754.887247 |
| deserialize | 200 | array | PRIMITIVE_ARRAY | 986136.067809 | 146675.360652 | 219333.990504 |
| deserialize | 200 | directBuffer | BUFFER | 3113115.471758 | 1004844.498712 | 598421.278941 |
| deserialize | 200 | directBuffer | PRIMITIVE_ARRAY | 991807.969328 | 518713.299422 | 179604.045774 |
| deserialize | 1000 | array | BUFFER | 2831942.848999 | 721266.541130 | 422147.154601 |
| deserialize | 1000 | array | PRIMITIVE_ARRAY | 205671.992736 | 30409.835023 | 53100.903684 |
| deserialize | 1000 | directBuffer | BUFFER | 3397690.327371 | 592972.713203 | 298929.116572 |
| deserialize | 1000 | directBuffer | PRIMITIVE_ARRAY | 202275.242341 | 112132.004609 | 38572.001768 |
| deserialize | 5000 | array | BUFFER | 3296658.120035 | 147251.846111 | 136934.604328 |
| deserialize | 5000 | array | PRIMITIVE_ARRAY | 40312.590172 | 6122.351228 | 10672.872798 |
| deserialize | 5000 | directBuffer | BUFFER | 3284441.570594 | 148614.476829 | 77950.612503 |
| deserialize | 5000 | directBuffer | PRIMITIVE_ARRAY | 40413.743717 | 21826.040410 | 8561.694533 |