首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被零除来自Colt OpenLongObjectHashMap的错误

被零除来自Colt OpenLongObjectHashMap的错误
EN

Stack Overflow用户
提问于 2019-01-28 18:47:44
回答 1查看 81关注 0票数 0

我在Colt OpenLongObjectHashMap上看到了这个例外

代码语言:javascript
复制
java.lang.ArithmeticException: divide by zero
        at cern.colt.map.OpenLongObjectHashMap.indexOfKey(Unknown Source)
        at cern.colt.map.OpenLongObjectHashMap.get(Unknown Source)

它是不可复制的。

这是indexOfKey:

代码语言:javascript
复制
protected int indexOfKey(long key) {
    final long tab[] = table;
    final byte stat[] = state;
    final int length = tab.length;

    final int hash = HashFunctions.hash(key) & 0x7FFFFFFF;
    int i = hash % length;
    int decrement = hash % (length-2); // double hashing, see http://www.eece.unm.edu/faculty/heileman/hash/node4.html
    //int decrement = (hash / length) % length;
    if (decrement == 0) decrement = 1;

    // stop if we find a free slot, or if we find the key itself.
    // do skip over removed slots (yes, open addressing is like that...)
    while (stat[i] != FREE && (stat[i] == REMOVED || tab[i] != key)) {
        i -= decrement;
        //hashCollisions++;
        if (i<0) i+=length;
    }

    if (stat[i] == FREE) return -1; // not found
    return i; //found, return index where key is contained
}

因此,唯一使用的除数是length(length - 2),其中lengthtable.lengthtable是内部数组。

然而,table只被初始化为一个最小大小为3的数组(默认值是277,这就是我使用的)。整数环绕似乎也是不可能的。

所以这似乎是一个不可能的错误。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 18:24:42

这被证明是正在使用的IBM JDK JIT编译器中的Java编译器优化错误。

请参阅此错误报告:IJ06000: UNEXPECTED DIVIDE BY ZERO EXCEPTION

建议的修复方法是禁用问题方法上的LoopVersioner优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54400267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档