RFR: 8247532: Records deserialization is slow
Peter Levart
peter.levart at gmail.com
Sun Jun 21 17:16:05 UTC 2020
Hi,
When re-running the benchmark [1] with different lengths of serialized
arrays of records, I found that, compared to classical classes, lookup
into the cache of adapted method handles starts to show when the length
of array is larger (# of instances of same record type deserialized in
single stream). Each record deserialized must lookup the method handle
in a ConcurrentHashMap:
Benchmark (length) Mode Cnt Score Error Units
RecordSerializationBench.deserializeClasses 10 avgt 10 8.088 ± 0.013 us/op
RecordSerializationBench.deserializeClasses 100 avgt 10 32.171 ± 0.324 us/op
RecordSerializationBench.deserializeClasses 1000 avgt 10 279.762 ± 3.072 us/op
RecordSerializationBench.deserializeRecords 10 avgt 10 9.011 ± 0.027 us/op
RecordSerializationBench.deserializeRecords 100 avgt 10 33.206 ± 0.514 us/op
RecordSerializationBench.deserializeRecords 1000 avgt 10 325.137 ± 0.969 us/op
...so keeping the correctly shaped adapted method handle in the
per-serialization-session ObjectStreamClass instance [2] starts to make
sense:
Benchmark (length) Mode Cnt Score Error Units
RecordSerializationBench.deserializeClasses 10 avgt 10 8.681 ± 0.155 us/op
RecordSerializationBench.deserializeClasses 100 avgt 10 32.496 ± 0.087 us/op
RecordSerializationBench.deserializeClasses 1000 avgt 10 279.014 ± 1.189 us/op
RecordSerializationBench.deserializeRecords 10 avgt 10 8.537 ± 0.032 us/op
RecordSerializationBench.deserializeRecords 100 avgt 10 31.451 ± 0.083 us/op
RecordSerializationBench.deserializeRecords 1000 avgt 10 250.854 ± 2.772 us/op
With that, more objects means advantage over classical classes instead
of disadvantage.
[1]
http://cr.openjdk.java.net/~plevart/jdk-dev/RecordsDeserialization/RecordSerializationBench.java
[2]
http://cr.openjdk.java.net/~plevart/jdk-dev/RecordsDeserialization/webrev.06/
Regards, Peter
More information about the core-libs-dev
mailing list