Integrated: 8269004 Implement ResizableResourceHashtable
Ioi Lam
iklam at openjdk.java.net
Mon Jul 5 02:34:04 UTC 2021
On Mon, 21 Jun 2021 04:31:42 GMT, Ioi Lam <iklam at openjdk.org> wrote:
> In HotSpot we have (at least) two hashtable designs in the C++ code:
>
> - share/utilities/hashtable.hpp
> - share/utilities/resourceHash.hpp
>
> Of the two, the `ResourceHashtable` API is much cleaner and most new code has been written with it. However, one issue is that the `SIZE` of `ResourceHashtable` is a compile-time constant. This makes the hash-to-index computation very fast on x64 (gcc can avoid using the slow divq instruction for modulo). However, the downside is we cannot use `ResourceHashtable` when we need a hashtable whose size is determined at run time (and, optionally, resizeable).
>
> This PR refactors `ResourceHashtable` into a base template class `ResourceHashtableBase`, whose `size()` function can be configured by a subclass to be either constant or runtime-configurable.
>
> Note: since we want to preserve the performance of `hash % SIZE`, we can't make `size()` a virtual function.
>
> Preliminary benchmark shows that this refactoring has no impact on the performance of the constant `ResourceHashtable`. See https://github.com/iklam/tools/tree/main/bench/resourceHash:
>
> *before*
> ResourceHashtable: 2.70 sec
>
> *after*
> ResourceHashtable: 2.72 sec
> ResizableResourceHashtable: 5.29 sec
>
> To make sure `ResizableResourceHashtable` works, I rewrote some CDS code to use `ResizableResourceHashtable` instead of `KVHashtable`
This pull request has now been integrated.
Changeset: 4da52eaf
Author: Ioi Lam <iklam at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/4da52eaf53e531e96e1e6eac460d6209916d6f2f
Stats: 272 lines in 7 files changed: 214 ins; 19 del; 39 mod
8269004: Implement ResizableResourceHashtable
Reviewed-by: coleenp, kbarrett
-------------
PR: https://git.openjdk.java.net/jdk/pull/4536
More information about the hotspot-dev
mailing list