Java / Scala中的高性能字符串散列函数

时间:2015-03-12 07:30:56

标签: java performance scala hash

在Java / Scala中寻找高性能的字符串散列函数 - 比MurmurHash系列的函数更快,不需要加密强大,只能很好地分发。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

目前适合该法案的最快哈希算法似乎是xxHash。 lz4-java项目包含implementation ported to Java。我不知道Java实现是否已经针对MurmurHash进行了基准测试; C ++中的性能优化并不总是移植到/来自Java。 (特别是,xxHash包含更多的数组访问,因此可能存在不可忽略的边界检查开销。)

编辑:我认为它使用JNI来调用xxHash的C ++实现,但JNI开销是不可忽略的,因此性能问题仍然存在。

但是,考虑到Scala includes a MurmurHash function,并且Java包含一个更快的默认哈希值(大约2倍),有时可以合理地分配,人们确实怀疑它是否真的有必要。例如,scala.util.hashing.MurmurHash3与从字节数组创建字符串的速度一样快,如果给它一个字节数组,速度是它的两倍。

答案 1 :(得分:5)

你可以找到非常快速的Java哈希函数实现,BTW帐户内部字符串实现(char[]数组)以最大化速度,这里:https://github.com/OpenHFT/Zero-Allocation-Hashing