Hello All; I have updated the webrevs for alternative hashing for String with feedback from Remi, Doug, Ulf and internal reviewers.
Additional feedback is welcome. Mike [1] althashing "7" webrev : http://cr.openjdk.java.net/~mduigou/althashing7/9/webrev/ [2] althashing "8" webrev : http://cr.openjdk.java.net/~mduigou/althashing8/9/webrev/ On May 22 2012, at 22:16 , Mike Duigou wrote: > Dear OpenJDK CoreLibs community, > > A significant enhancement to the Java SE hashing-based Map implementations in > planned for inclusion in Java SE 7u6. All of the hashing based Map > implementations: HashMap, Hashtable, LinkedHashMap, WeakHashMap and > ConcurrentHashMap will now use an enhanced hashing algorithm for string keys > when the capacity of the hash table has ever grown beyond 512 entries. The > enhanced hashing implementation uses the murmur3 hashing algorithm[1] along > with random hash seeds and index masks. These enhancements mitigate cases > where colliding String hash values could result in a performance bottleneck. > > In order to provide the greatest opportunity for developers to test > compatibility with their applications this change will be incorporated into > JDK7u6 build 12 and JDK8 build 39. Both builds are planned for release next > week. ***For 7u6 build 12 only, the alternative hashing will be > unconditionally enabled (always on).*** The threshold default will be reset > to the intended release default (512) for 7u6 build 13. > > The quick promotion of this change into builds with limited opportunity for > public review and the special behaviour for build 12 is intended to make it > easier for developers to test their application compatibility. Feedback on > the approach, implementation, compatibility and performance is eagerly sought > and encouraged both before *and after* this change is incorporated into the > OpenJDK repositories. > > A new system property, jdk.map.althashing.threshold, allows adjustment of the > threshold for enabling the enhanced hashing algorithm. If changed from the > default value of 512, the enhanced hashing will be invoked any time after map > capacity exceeds the value of jdk.map.althashing.threshold. To completely > disable the enhanced hashing (not recommended), set > jdk.map.althashing.threshold to -1 or a very large number such as 2^31 -1 > (Integer.MAX_VALUE). > > The iteration order of keys, values and entries for hash-based maps where the > new algorithm has been invoked will vary for each HashMap instance. While the > Java SE Map documentation makes no promises that iteration order of items > returned from Maps will be consistent, developers should check if their > applications have incorrectly created a dependency on the iteration order of > Map entries, keys or values. > > Webrevs for the Java 7u6 and 8 changes are available for download at [2] and > [3] for your review. There are some important differences between the Java 7 > and 8 implementations of this enhancement. Most specifically in the Java 8 > implementation alternative string hashing is always enabled--no threshold is > used for enablement and alternative hashing cannot be disabled. (The Java 8 > implementation completely ignores the jdk.map.althashing.threshold system > property). The Java 8 implementation is also subject to additional refinement > as Java 8 develops. > > If you have any questions or concerns with this planned enhancement, please > use the corelibs development mailing list, > <mailto:core-libs-dev@openjdk.java.net>, or you may also respond privately to > me if you prefer. > > Thanks, > > Mike > > [1] Murmur3 : https://code.google.com/p/smhasher/wiki/MurmurHash3 > [2] althashing "7" webrev : > http://cr.openjdk.java.net/~mduigou/althashing7/8/webrev/ > [3] althashing "8" webrev : > http://cr.openjdk.java.net/~mduigou/althashing8/8/webrev/