On Wed, 6 Jan 2021 01:27:52 GMT, Claes Redestad <redes...@openjdk.org> wrote:

>> Hitting up `new MD5()` directly could be a great idea. I expect this would 
>> be just as fast as the cache+clone (if not faster), but I'm a bit worried 
>> we'd be short-circuiting the ability to install an alternative MD5 provider 
>> (which may or may not be a thing we must support..), but it's worth 
>> exploring.
>> 
>> Comparing performance of this against a `ByteBuffer` impl is on my TODO. The 
>> `VarHandle` gets heavily inlined and optimized here, though, with 
>> performance in my tests similar to the `Unsafe` use in `ByteArrayAccess`.
>
> I've identified a number of optimizations to the plumbing behind 
> `MessageDigest.getDigest(..)` over in #1933 that removes 80-90% of the 
> throughput overhead and all the allocation overhead compared to the `clone()` 
> approach prototyped here. The remaining 20ns/op overhead might not be enough 
> of a concern to do a point fix in `UUID::nameUUIDFromBytes`.

Removing the UUID clone cache and running the microbenchmark along with the 
changes in #1933:

Benchmark                                                  (size)   Mode  Cnt   
 Score    Error   Units
UUIDBench.fromType3Bytes                                    20000  thrpt   12   
 2.182 ±  0.090  ops/us
UUIDBench.fromType3Bytes:·gc.alloc.rate                     20000  thrpt   12  
439.020 ± 18.241  MB/sec
UUIDBench.fromType3Bytes:·gc.alloc.rate.norm                20000  thrpt   12  
264.022 ±  0.003    B/op

The goal now is if to simplify the digest code and compare alternatives.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1855

Reply via email to