RFR: 8324646: Avoid Class.forName in SecureRandom constructor [v3]

Oli Gillespie ogillespie at openjdk.org
Thu Feb 1 10:39:27 UTC 2024


> Avoid expensive `Class.forName` call when constructing Providers such as `SecureRandom` which take constructor parameters. This can easily be cached in EngineDescription (this cache already existed before, it was removed in [JDK-8280970](https://bugs.openjdk.org/browse/JDK-8280970) as unused, I'm bringing it back unchanged to support this new usage).
> 
> Benchmark results on my Linux x86 host show around a 20% reduction in time to create a new `SecureRandom` instance. Most of the remaining overhead is due to a failing constructor lookup - see [JDK-8324648](https://bugs.openjdk.org/browse/JDK-8324648).
> 
> 
> Before
> newSecureRandom  avgt  2930 ± 50  ns/op
> 
> After
> newSecureRandom  avgt  2400 ± 33  ns/op
> 
> 
> I have seen multiple real-world applications which call `new SecureRandom()` on the hot path, so I believe efficiency here is important.

Oli Gillespie has updated the pull request incrementally with one additional commit since the last revision:

  Use class literals instead of forName

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/17559/files
  - new: https://git.openjdk.org/jdk/pull/17559/files/8d8f2d0b..45da78f9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=17559&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=17559&range=01-02

  Stats: 27 lines in 1 file changed: 4 ins; 11 del; 12 mod
  Patch: https://git.openjdk.org/jdk/pull/17559.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17559/head:pull/17559

PR: https://git.openjdk.org/jdk/pull/17559



More information about the security-dev mailing list