Skip to content

Latest commit

 

History

History
239 lines (182 loc) · 19 KB

File metadata and controls

239 lines (182 loc) · 19 KB

Java Benchmarks

System Environment

  • 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 params

Don't skip warm up, otherwise the results aren't accurate.

 -f 1 -wi 3 -i 3 -t 1 -w 2s -r 2s -rf cs

Benchmark Data

Struct

Struct is a class with 100 primitive fields:

public class Struct {
  public int f1;
  public long f2;
  public float f3;
  public double f4;
  // ...
  public double f99;
}

Struct2

Struct2 is a class with 100 boxed fields:

public class Struct {
  public Integer f1;
  public Long f2;
  public Float f3;
  public Double f4;
  // ...
  public Double f99;
}

MediaContent

MEDIA_CONTENT is a class from jvm-serializers.

Sample

SAMPLE is a class from kryo benchmark

Benchmark Plots

Serialize to heap buffer

Serialize data java byte array.

Java schema consistent serialization

The deserialization peer must have same class definition with the serialization peer. No class forward/backward compatibility are supported in this mode.

Java Heap Schema Consistent Serialization

Java schema compatible serialization

The deserialization peer can have different class definition with the serialization peer. Class forward/backward compatibility are supported in this mode.

Java Heap Schema Compatible Serialization

Java schema consistent deserialization

The deserialization peer must have same class definition with the serialization peer. No class forward/backward compatibility are supported in this mode.

Java Heap Schema Consistent Deserialization

Java schema compatible deserialization

The deserialization peer can have different class definition with the serialization peer. Class forward/backward compatibility are supported in this mode.

Java Heap Schema Compatible Deserialization

Off-heap serialization

Serialize data off-heap memory.

Java schema consistent serialization

The deserialization peer must have same class definition with the serialization peer. No class forward/backward compatibility are supported in this mode.

Java Off Heap Schema Consistent Serialization

Java schema compatible serialization

The deserialization peer can have different class definition with the serialization peer. Class forward/backward compatibility are supported in this mode.

Java Off Heap Schema Compatible Serialization

Java schema consistent deserialization

The deserialization peer must have same class definition with the serialization peer. No class forward/backward compatibility are supported in this mode.

Java Off Heap Schema Consistent Deserialization

Java schema compatible deserialization

The deserialization peer can have different class definition with the serialization peer. Class forward/backward compatibility are supported in this mode.

Java Off Heap Schema Compatible Deserialization

Zero-copy serialization

Note that zero-copy serialization just avoid the copy in serialization, if you send data to other machine, there may be copies.

But if you serialize data between processes on same node and use shared-memory, if the data are in off-heap before serialization, then other processes can read this buffer without any copies.

Java zero-copy serialize to heap buffer

Java Zero Copy Serialization

Java zero-copy serialize to direct buffer

Java Zero Copy Deserialization

Benchmark Data

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 Zero-copy

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