RFR: 8247532: Records deserialization is slow
Claes Redestad
claes.redestad at oracle.com
Sun Jun 21 23:04:59 UTC 2020
Hi Peter,
patch and results look great!
My only real comment on this is that I think the microbenchmark would be
a valuable contribution, too.
It'd also be interesting to explore how poor performance would become if
we'd hit the (artificial) 11 layouts limit, e.g, by cycling through
10, 11, or 12 different shapes.
/Claes
On 2020-06-21 19:16, Peter Levart wrote:
> 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