RFR: 8269004 Implement ResizableResourceHashtable
    Ioi Lam 
    iklam at openjdk.java.net
       
    Mon Jun 21 05:01:59 UTC 2021
    
    
  
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`
-------------
Commit messages:
 - cleanup
 - step4 - implemented resizing
 - step3
 - step2
 - step1
Changes: https://git.openjdk.java.net/jdk/pull/4536/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4536&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8269004
  Stats: 183 lines in 7 files changed: 148 ins; 6 del; 29 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4536.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4536/head:pull/4536
PR: https://git.openjdk.java.net/jdk/pull/4536
    
    
More information about the hotspot-dev
mailing list